linkml 1.7.9__py3-none-any.whl → 1.7.11rc1__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.
- linkml/generators/pydanticgen/black.py +1 -3
- linkml/generators/pydanticgen/includes.py +46 -0
- linkml/generators/pydanticgen/pydanticgen.py +110 -14
- linkml/generators/pydanticgen/template.py +26 -0
- linkml/generators/pydanticgen/templates/attribute.py.jinja +7 -1
- linkml/generators/pydanticgen/templates/class.py.jinja +4 -0
- linkml/generators/pydanticgen/templates/module.py.jinja +12 -5
- linkml/generators/shaclgen.py +4 -3
- {linkml-1.7.9.dist-info → linkml-1.7.11rc1.dist-info}/METADATA +1 -1
- {linkml-1.7.9.dist-info → linkml-1.7.11rc1.dist-info}/RECORD +13 -12
- {linkml-1.7.9.dist-info → linkml-1.7.11rc1.dist-info}/LICENSE +0 -0
- {linkml-1.7.9.dist-info → linkml-1.7.11rc1.dist-info}/WHEEL +0 -0
- {linkml-1.7.9.dist-info → linkml-1.7.11rc1.dist-info}/entry_points.txt +0 -0
@@ -16,9 +16,7 @@ except ImportError:
|
|
16
16
|
|
17
17
|
|
18
18
|
def _default_mode() -> "Mode":
|
19
|
-
return Mode(
|
20
|
-
target_versions={TargetVersion.PY311},
|
21
|
-
)
|
19
|
+
return Mode(target_versions={TargetVersion.PY311}, line_length=120)
|
22
20
|
|
23
21
|
|
24
22
|
def format_black(code: str, mode: Optional["Mode"] = None) -> str:
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"""
|
2
|
+
Classes to inject in generated pydantic models
|
3
|
+
"""
|
4
|
+
|
5
|
+
from pydantic.version import VERSION
|
6
|
+
|
7
|
+
PYDANTIC_VERSION = int(VERSION[0])
|
8
|
+
|
9
|
+
|
10
|
+
LinkMLMeta_v1 = """
|
11
|
+
class LinkMLMeta(BaseModel):
|
12
|
+
__root__: Dict[str, Any] = {}
|
13
|
+
|
14
|
+
def __getattr__(self, key:str):
|
15
|
+
return getattr(self.__root__, key)
|
16
|
+
|
17
|
+
def __getitem__(self, key:str):
|
18
|
+
return self.__root__[key]
|
19
|
+
|
20
|
+
def __setitem__(self, key:str, value):
|
21
|
+
self.__root__[key] = value
|
22
|
+
|
23
|
+
class Config:
|
24
|
+
allow_mutation = False
|
25
|
+
"""
|
26
|
+
|
27
|
+
LinkMLMeta_v2 = """
|
28
|
+
class LinkMLMeta(RootModel):
|
29
|
+
root: Dict[str, Any] = {}
|
30
|
+
model_config = ConfigDict(frozen=True)
|
31
|
+
|
32
|
+
def __getattr__(self, key:str):
|
33
|
+
return getattr(self.root, key)
|
34
|
+
|
35
|
+
def __getitem__(self, key:str):
|
36
|
+
return self.root[key]
|
37
|
+
|
38
|
+
def __setitem__(self, key:str, value):
|
39
|
+
self.root[key] = value
|
40
|
+
|
41
|
+
"""
|
42
|
+
|
43
|
+
# if PYDANTIC_VERSION >= 2:
|
44
|
+
# LinkMLMeta = eval(LinkMLMeta_v2)
|
45
|
+
# else:
|
46
|
+
# LinkMLMeta = eval(LinkMLMeta_v1)
|
@@ -3,19 +3,12 @@ import logging
|
|
3
3
|
import os
|
4
4
|
import textwrap
|
5
5
|
from collections import defaultdict
|
6
|
-
from copy import deepcopy
|
6
|
+
from copy import copy, deepcopy
|
7
7
|
from dataclasses import dataclass, field
|
8
|
+
from enum import Enum
|
8
9
|
from pathlib import Path
|
9
10
|
from types import ModuleType
|
10
|
-
from typing import
|
11
|
-
Dict,
|
12
|
-
List,
|
13
|
-
Literal,
|
14
|
-
Optional,
|
15
|
-
Set,
|
16
|
-
Type,
|
17
|
-
Union,
|
18
|
-
)
|
11
|
+
from typing import Dict, List, Literal, Optional, Set, Type, TypeVar, Union, overload
|
19
12
|
|
20
13
|
import click
|
21
14
|
from jinja2 import ChoiceLoader, Environment, FileSystemLoader
|
@@ -27,7 +20,7 @@ from linkml_runtime.linkml_model.meta import (
|
|
27
20
|
TypeDefinition,
|
28
21
|
)
|
29
22
|
from linkml_runtime.utils.compile_python import compile_python
|
30
|
-
from linkml_runtime.utils.formatutils import camelcase, underscore
|
23
|
+
from linkml_runtime.utils.formatutils import camelcase, remove_empty_items, underscore
|
31
24
|
from linkml_runtime.utils.schemaview import SchemaView
|
32
25
|
from pydantic.version import VERSION as PYDANTIC_VERSION
|
33
26
|
|
@@ -37,6 +30,7 @@ from linkml.generators.common.type_designators import (
|
|
37
30
|
get_type_designator_value,
|
38
31
|
)
|
39
32
|
from linkml.generators.oocodegen import OOCodeGenerator
|
33
|
+
from linkml.generators.pydanticgen import includes
|
40
34
|
from linkml.generators.pydanticgen.array import ArrayRangeGenerator, ArrayRepresentation
|
41
35
|
from linkml.generators.pydanticgen.build import SlotResult
|
42
36
|
from linkml.generators.pydanticgen.template import (
|
@@ -85,6 +79,7 @@ DEFAULT_IMPORTS = (
|
|
85
79
|
module="typing",
|
86
80
|
objects=[
|
87
81
|
ObjectImport(name="Any"),
|
82
|
+
ObjectImport(name="ClassVar"),
|
88
83
|
ObjectImport(name="List"),
|
89
84
|
ObjectImport(name="Literal"),
|
90
85
|
ObjectImport(name="Dict"),
|
@@ -100,6 +95,7 @@ DEFAULT_IMPORTS = (
|
|
100
95
|
ObjectImport(name="BaseModel"),
|
101
96
|
ObjectImport(name="ConfigDict"),
|
102
97
|
ObjectImport(name="Field"),
|
98
|
+
ObjectImport(name="RootModel"),
|
103
99
|
ObjectImport(name="field_validator"),
|
104
100
|
],
|
105
101
|
alternative=Import(
|
@@ -109,6 +105,33 @@ DEFAULT_IMPORTS = (
|
|
109
105
|
)
|
110
106
|
)
|
111
107
|
|
108
|
+
DEFAULT_INJECTS = {1: [includes.LinkMLMeta_v1], 2: [includes.LinkMLMeta_v2]}
|
109
|
+
|
110
|
+
|
111
|
+
class MetadataMode(str, Enum):
|
112
|
+
FULL = "full"
|
113
|
+
"""
|
114
|
+
all metadata from the source schema will be included, even if it is represented by the template classes,
|
115
|
+
and even if it is represented by some child class (eg. "classes" will be included with schema metadata
|
116
|
+
"""
|
117
|
+
EXCEPT_CHILDREN = "except_children"
|
118
|
+
"""
|
119
|
+
all metadata from the source schema will be included, even if it is represented by the template classes,
|
120
|
+
except if it is represented by some child template class (eg. "classes" will be excluded from schema metadata)
|
121
|
+
"""
|
122
|
+
AUTO = "auto"
|
123
|
+
"""
|
124
|
+
Only the metadata that isn't represented by the template classes or excluded with ``meta_exclude`` will be included
|
125
|
+
"""
|
126
|
+
NONE = None
|
127
|
+
"""
|
128
|
+
No metadata will be included.
|
129
|
+
"""
|
130
|
+
|
131
|
+
|
132
|
+
DefinitionType = TypeVar("DefinitionType", bound=Union[SchemaDefinition, ClassDefinition, SlotDefinition])
|
133
|
+
TemplateType = TypeVar("TemplateType", bound=Union[PydanticModule, PydanticClass, PydanticAttribute])
|
134
|
+
|
112
135
|
|
113
136
|
@dataclass
|
114
137
|
class PydanticGenerator(OOCodeGenerator):
|
@@ -212,6 +235,12 @@ class PydanticGenerator(OOCodeGenerator):
|
|
212
235
|
from typing_extensions import Literal
|
213
236
|
|
214
237
|
"""
|
238
|
+
metadata_mode: Union[MetadataMode, str, None] = MetadataMode.AUTO
|
239
|
+
"""
|
240
|
+
How to include schema metadata in generated pydantic models.
|
241
|
+
|
242
|
+
See :class:`.MetadataMode` for mode documentation
|
243
|
+
"""
|
215
244
|
|
216
245
|
# ObjectVars (identical to pythongen)
|
217
246
|
gen_classvars: bool = True
|
@@ -530,6 +559,56 @@ class PydanticGenerator(OOCodeGenerator):
|
|
530
559
|
|
531
560
|
return array_reps
|
532
561
|
|
562
|
+
@overload
|
563
|
+
def include_metadata(self, model: PydanticModule, source: SchemaDefinition) -> PydanticModule: ...
|
564
|
+
|
565
|
+
@overload
|
566
|
+
def include_metadata(self, model: PydanticClass, source: ClassDefinition) -> PydanticClass: ...
|
567
|
+
|
568
|
+
@overload
|
569
|
+
def include_metadata(self, model: PydanticAttribute, source: SlotDefinition) -> PydanticAttribute: ...
|
570
|
+
|
571
|
+
def include_metadata(self, model: TemplateType, source: DefinitionType) -> TemplateType:
|
572
|
+
"""
|
573
|
+
Include metadata from the source schema that is otherwise not represented in the pydantic template models.
|
574
|
+
|
575
|
+
Metadata inclusion mode is dependent on :attr:`.metadata_mode` - see:
|
576
|
+
|
577
|
+
- :class:`.MetadataMode`
|
578
|
+
- :meth:`.TemplateModel.exclude_from_meta`
|
579
|
+
|
580
|
+
"""
|
581
|
+
if self.metadata_mode is None or self.metadata_mode == MetadataMode.NONE:
|
582
|
+
return model
|
583
|
+
elif self.metadata_mode in (MetadataMode.AUTO, MetadataMode.AUTO.value):
|
584
|
+
meta = {k: v for k, v in remove_empty_items(source).items() if k not in model.exclude_from_meta()}
|
585
|
+
elif self.metadata_mode in (MetadataMode.EXCEPT_CHILDREN, MetadataMode.EXCEPT_CHILDREN.value):
|
586
|
+
meta = {}
|
587
|
+
for k, v in remove_empty_items(source).items():
|
588
|
+
if not hasattr(model, k):
|
589
|
+
meta[k] = v
|
590
|
+
elif isinstance(getattr(model, k), list) and not any(
|
591
|
+
[isinstance(item, TemplateModel) for item in getattr(model, k)]
|
592
|
+
):
|
593
|
+
meta[k] = v
|
594
|
+
elif isinstance(getattr(model, k), dict) and not any(
|
595
|
+
[isinstance(item, TemplateModel) for item in getattr(model, k).values()]
|
596
|
+
):
|
597
|
+
meta[k] = v
|
598
|
+
elif not isinstance(getattr(model, k), TemplateModel):
|
599
|
+
meta[k] = v
|
600
|
+
|
601
|
+
elif self.metadata_mode in (MetadataMode.FULL, MetadataMode.FULL.value):
|
602
|
+
meta = remove_empty_items(source)
|
603
|
+
else:
|
604
|
+
raise ValueError(
|
605
|
+
f"Unknown metadata mode '{self.metadata_mode}', needs to be one of "
|
606
|
+
f"{[mode.value for mode in MetadataMode]}"
|
607
|
+
)
|
608
|
+
|
609
|
+
model.meta = meta
|
610
|
+
return model
|
611
|
+
|
533
612
|
def render(self) -> PydanticModule:
|
534
613
|
sv: SchemaView
|
535
614
|
sv = self.schemaview
|
@@ -540,7 +619,7 @@ class PydanticGenerator(OOCodeGenerator):
|
|
540
619
|
description=schema.description.replace('"', '\\"') if schema.description else None,
|
541
620
|
)
|
542
621
|
enums = self.generate_enums(sv.all_enums())
|
543
|
-
injected_classes = []
|
622
|
+
injected_classes = copy(DEFAULT_INJECTS[self.pydantic_version])
|
544
623
|
if self.injected_classes is not None:
|
545
624
|
injected_classes += self.injected_classes
|
546
625
|
|
@@ -665,15 +744,22 @@ class PydanticGenerator(OOCodeGenerator):
|
|
665
744
|
predef_slot = str(predef_slot)
|
666
745
|
new_fields["predefined"] = predef_slot
|
667
746
|
new_fields["name"] = attr_name
|
747
|
+
|
668
748
|
attrs[attr_name] = PydanticAttribute(**new_fields, pydantic_ver=self.pydantic_version)
|
749
|
+
attrs[attr_name] = self.include_metadata(attrs[attr_name], src_attr)
|
669
750
|
|
670
751
|
new_class = PydanticClass(
|
671
752
|
name=k, attributes=attrs, description=c.description, pydantic_ver=self.pydantic_version
|
672
753
|
)
|
754
|
+
new_class = self.include_metadata(new_class, c)
|
673
755
|
if k in bases:
|
674
756
|
new_class.bases = bases[k]
|
675
757
|
classes[k] = new_class
|
676
758
|
|
759
|
+
schema_meta = {
|
760
|
+
k: v for k, v in remove_empty_items(schema).items() if k not in PydanticModule.exclude_from_meta()
|
761
|
+
}
|
762
|
+
|
677
763
|
module = PydanticModule(
|
678
764
|
pydantic_ver=self.pydantic_version,
|
679
765
|
metamodel_version=self.schema.metamodel_version,
|
@@ -683,7 +769,9 @@ class PydanticGenerator(OOCodeGenerator):
|
|
683
769
|
injected_classes=injected_classes,
|
684
770
|
enums=enums,
|
685
771
|
classes=classes,
|
772
|
+
meta=schema_meta,
|
686
773
|
)
|
774
|
+
module = self.include_metadata(module, pyschema)
|
687
775
|
return module
|
688
776
|
|
689
777
|
def serialize(self) -> str:
|
@@ -723,7 +811,7 @@ Available templates to override:
|
|
723
811
|
@click.option(
|
724
812
|
"--pydantic-version",
|
725
813
|
type=click.IntRange(1, 2),
|
726
|
-
default=
|
814
|
+
default=int(PYDANTIC_VERSION[0]),
|
727
815
|
help="Pydantic version to use (1 or 2)",
|
728
816
|
)
|
729
817
|
@click.option(
|
@@ -739,6 +827,12 @@ Available templates to override:
|
|
739
827
|
default="forbid",
|
740
828
|
help="How to handle extra fields in BaseModel.",
|
741
829
|
)
|
830
|
+
@click.option(
|
831
|
+
"--black",
|
832
|
+
is_flag=True,
|
833
|
+
default=False,
|
834
|
+
help="Format generated models with black (must be present in the environment)",
|
835
|
+
)
|
742
836
|
@click.version_option(__version__, "-V", "--version")
|
743
837
|
@click.command()
|
744
838
|
def cli(
|
@@ -750,8 +844,9 @@ def cli(
|
|
750
844
|
classvars=True,
|
751
845
|
slots=True,
|
752
846
|
array_representations=list("list"),
|
753
|
-
pydantic_version=
|
847
|
+
pydantic_version=int(PYDANTIC_VERSION[0]),
|
754
848
|
extra_fields: Literal["allow", "forbid", "ignore"] = "forbid",
|
849
|
+
black: bool = False,
|
755
850
|
**args,
|
756
851
|
):
|
757
852
|
"""Generate pydantic classes to represent a LinkML model"""
|
@@ -777,6 +872,7 @@ def cli(
|
|
777
872
|
gen_classvars=classvars,
|
778
873
|
gen_slots=slots,
|
779
874
|
template_dir=template_dir,
|
875
|
+
black=black,
|
780
876
|
**args,
|
781
877
|
)
|
782
878
|
print(gen.serialize())
|
@@ -60,6 +60,7 @@ class TemplateModel(BaseModel):
|
|
60
60
|
)
|
61
61
|
|
62
62
|
pydantic_ver: int = int(PYDANTIC_VERSION[0])
|
63
|
+
meta_exclude: ClassVar[List[str]] = None
|
63
64
|
|
64
65
|
def render(self, environment: Optional[Environment] = None, black: bool = False) -> str:
|
65
66
|
"""
|
@@ -132,6 +133,16 @@ class TemplateModel(BaseModel):
|
|
132
133
|
return self.json(**kwargs)
|
133
134
|
return self.dict(**kwargs)
|
134
135
|
|
136
|
+
@classmethod
|
137
|
+
def exclude_from_meta(cls: "TemplateModel") -> List[str]:
|
138
|
+
"""
|
139
|
+
Attributes in the source definition to exclude from linkml_meta
|
140
|
+
"""
|
141
|
+
ret = [*cls.model_fields.keys()]
|
142
|
+
if cls.meta_exclude is not None:
|
143
|
+
ret = ret + cls.meta_exclude
|
144
|
+
return ret
|
145
|
+
|
135
146
|
|
136
147
|
def _render(
|
137
148
|
item: Union[TemplateModel, Any, List[Union[Any, TemplateModel]], Dict[str, Union[Any, TemplateModel]]],
|
@@ -213,6 +224,7 @@ class PydanticAttribute(TemplateModel):
|
|
213
224
|
"""
|
214
225
|
|
215
226
|
template: ClassVar[str] = "attribute.py.jinja"
|
227
|
+
meta_exclude: ClassVar[List[str]] = ["from_schema", "owner", "range", "multivalued", "inlined", "inlined_as_list"]
|
216
228
|
|
217
229
|
name: str
|
218
230
|
required: bool = False
|
@@ -237,6 +249,10 @@ class PydanticAttribute(TemplateModel):
|
|
237
249
|
minimum_value: Optional[Union[int, float]] = None
|
238
250
|
maximum_value: Optional[Union[int, float]] = None
|
239
251
|
pattern: Optional[str] = None
|
252
|
+
meta: Optional[Dict[str, Any]] = None
|
253
|
+
"""
|
254
|
+
Metadata for the slot to be included in a Field annotation
|
255
|
+
"""
|
240
256
|
|
241
257
|
if int(PYDANTIC_VERSION[0]) >= 2:
|
242
258
|
|
@@ -283,11 +299,16 @@ class PydanticClass(TemplateModel):
|
|
283
299
|
"""
|
284
300
|
|
285
301
|
template: ClassVar[str] = "class.py.jinja"
|
302
|
+
meta_exclude: ClassVar[List[str]] = ["slots", "is_a"]
|
286
303
|
|
287
304
|
name: str
|
288
305
|
bases: Union[List[str], str] = PydanticBaseModel.default_name
|
289
306
|
description: Optional[str] = None
|
290
307
|
attributes: Optional[Dict[str, PydanticAttribute]] = None
|
308
|
+
meta: Optional[Dict[str, Any]] = None
|
309
|
+
"""
|
310
|
+
Metadata for the class to be included in a linkml_meta class attribute
|
311
|
+
"""
|
291
312
|
|
292
313
|
def _validators(self) -> Optional[Dict[str, PydanticValidator]]:
|
293
314
|
if self.attributes is None:
|
@@ -548,6 +569,7 @@ class PydanticModule(TemplateModel):
|
|
548
569
|
"""
|
549
570
|
|
550
571
|
template: ClassVar[str] = "module.py.jinja"
|
572
|
+
meta_exclude: ClassVar[str] = ["slots"]
|
551
573
|
|
552
574
|
metamodel_version: Optional[str] = None
|
553
575
|
version: Optional[str] = None
|
@@ -556,6 +578,10 @@ class PydanticModule(TemplateModel):
|
|
556
578
|
imports: List[Union[Import, ConditionalImport]] = Field(default_factory=list)
|
557
579
|
enums: Dict[str, PydanticEnum] = Field(default_factory=dict)
|
558
580
|
classes: Dict[str, PydanticClass] = Field(default_factory=dict)
|
581
|
+
meta: Optional[Dict[str, Any]] = None
|
582
|
+
"""
|
583
|
+
Metadata for the schema to be included in a linkml_meta module-level instance of LinkMLMeta
|
584
|
+
"""
|
559
585
|
|
560
586
|
if int(PYDANTIC_VERSION[0]) >= 2:
|
561
587
|
|
@@ -7,4 +7,10 @@
|
|
7
7
|
{%- if minimum_value != None %}, ge={{minimum_value}}{% endif -%}
|
8
8
|
{%- if maximum_value != None %}, le={{maximum_value}}{% endif -%}
|
9
9
|
{%- endif -%}
|
10
|
-
|
10
|
+
{%- if meta != None -%}
|
11
|
+
{%- if pydantic_ver == 1 -%}
|
12
|
+
, linkml_meta = {{ meta | pprint | indent(width=8) }}
|
13
|
+
{% else -%}
|
14
|
+
, json_schema_extra = { "linkml_meta": {{ meta | pprint | indent(width=8) }} }
|
15
|
+
{%- endif -%}
|
16
|
+
{%- endif -%})
|
@@ -4,6 +4,10 @@ class {{ name }}({% if bases is string %}{{ bases }}{% else %}{{ bases | join(',
|
|
4
4
|
{{ description | indent(width=4) }}
|
5
5
|
"""
|
6
6
|
{% endif -%}
|
7
|
+
{% if meta != None %}
|
8
|
+
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({% if pydantic_ver == 1 %}__root__={% endif %}{{ meta | pprint | indent(width=8) }})
|
9
|
+
|
10
|
+
{% endif %}
|
7
11
|
{% if attributes or validators %}
|
8
12
|
{% if attributes %}
|
9
13
|
{% for attr in attributes.values() %}
|
@@ -7,18 +7,25 @@ version = "{{version if version else None}}"
|
|
7
7
|
|
8
8
|
|
9
9
|
{{ base_model }}
|
10
|
-
{% if enums %}
|
11
|
-
{% for e in enums.values() %}
|
12
10
|
|
13
|
-
{{ e }}
|
14
|
-
{% endfor %}
|
15
|
-
{% endif %}
|
16
11
|
{% if injected_classes %}
|
17
12
|
{% for c in injected_classes%}
|
18
13
|
|
19
14
|
{{ c }}
|
20
15
|
{% endfor %}
|
21
16
|
{% endif %}
|
17
|
+
{% if meta != None %}
|
18
|
+
linkml_meta = LinkMLMeta({% if pydantic_ver == 1 %}__root__={% endif %}{{ meta | pprint | indent(width=4) }} )
|
19
|
+
{% else %}
|
20
|
+
linkml_meta = None
|
21
|
+
{% endif %}
|
22
|
+
{% if enums %}
|
23
|
+
{% for e in enums.values() %}
|
24
|
+
|
25
|
+
{{ e }}
|
26
|
+
{% endfor %}
|
27
|
+
{% endif %}
|
28
|
+
|
22
29
|
{% for c in classes.values() %}
|
23
30
|
|
24
31
|
{{ c }}
|
linkml/generators/shaclgen.py
CHANGED
@@ -130,7 +130,7 @@ class ShaclGenerator(Generator):
|
|
130
130
|
|
131
131
|
self._add_class(cl_node_pv, r)
|
132
132
|
range_list.append(class_node)
|
133
|
-
elif r in sv.all_types()
|
133
|
+
elif r in sv.all_types():
|
134
134
|
t_node = BNode()
|
135
135
|
|
136
136
|
def t_node_pv(p, v):
|
@@ -168,7 +168,7 @@ class ShaclGenerator(Generator):
|
|
168
168
|
prop_pv(SH.nodeKind, SH.IRI)
|
169
169
|
else:
|
170
170
|
prop_pv(SH.nodeKind, SH.BlankNodeOrIRI)
|
171
|
-
elif r in sv.all_types()
|
171
|
+
elif r in sv.all_types():
|
172
172
|
self._add_type(prop_pv, r)
|
173
173
|
elif r in sv.all_enums():
|
174
174
|
self._add_enum(g, prop_pv, r)
|
@@ -201,10 +201,11 @@ class ShaclGenerator(Generator):
|
|
201
201
|
func(SH["in"], pv_node)
|
202
202
|
|
203
203
|
def _add_type(self, func: Callable, r: ElementName) -> None:
|
204
|
+
func(SH.nodeKind, SH.Literal)
|
204
205
|
sv = self.schemaview
|
205
206
|
rt = sv.get_type(r)
|
206
207
|
if rt.uri:
|
207
|
-
func(SH.datatype, rt
|
208
|
+
func(SH.datatype, URIRef(sv.get_uri(rt, expand=True)))
|
208
209
|
else:
|
209
210
|
logging.error(f"No URI for type {rt.name}")
|
210
211
|
|
@@ -41,25 +41,26 @@ linkml/generators/projectgen.py,sha256=OuT_AneoZFNMCn50GllfZafadUHt50u61JcftM2ee
|
|
41
41
|
linkml/generators/protogen.py,sha256=i4sEhNdAiFFP12fwfRdype1MX8yU-E5fF7XzkcpBCd0,2512
|
42
42
|
linkml/generators/pydanticgen/__init__.py,sha256=uKGaaQSaeKqinHImXGFE448i-t8Oi0No8suIO76sep8,629
|
43
43
|
linkml/generators/pydanticgen/array.py,sha256=1QWWgz46yVmWkdNauI6Kjkbx3kexp-l210nOILoHJ18,19506
|
44
|
-
linkml/generators/pydanticgen/black.py,sha256=
|
44
|
+
linkml/generators/pydanticgen/black.py,sha256=BaJ7b-kMUbIN_cKRT3yCaMEbFwxzj1_U7w4fKQnkL44,723
|
45
45
|
linkml/generators/pydanticgen/build.py,sha256=Ia8qy4C16b-KqO_fw4tGQW_Eo4grCVyX7RsuJ3uRTtk,2681
|
46
|
-
linkml/generators/pydanticgen/
|
47
|
-
linkml/generators/pydanticgen/
|
48
|
-
linkml/generators/pydanticgen/
|
46
|
+
linkml/generators/pydanticgen/includes.py,sha256=PIVbACrtqQS6LFrXqQsJC6dQUcGBM3uY4E4qLQWJrnk,998
|
47
|
+
linkml/generators/pydanticgen/pydanticgen.py,sha256=S5t9RhS3R7nhE4DmYX--e41th9sIyrO2T3SdBPtxIJE,34471
|
48
|
+
linkml/generators/pydanticgen/template.py,sha256=HESLY1Rd7N_e92dqrh_fif_yp3oDl0n1UAghklMyphA,20982
|
49
|
+
linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=S_T-M7n_eeM3LW5gQUuTPH1-Oc1CEtL7Bve7qAFouYQ,688
|
49
50
|
linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=48y64MnC9rjNSV-nKLMeDuHN4gm15UsInhnKxh65zoM,834
|
50
|
-
linkml/generators/pydanticgen/templates/class.py.jinja,sha256=
|
51
|
+
linkml/generators/pydanticgen/templates/class.py.jinja,sha256=V_lyvFcZ9QhlKZi2bL5iff8RjHir2SQTTypOzQMOfmk,744
|
51
52
|
linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
|
52
53
|
linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=572XFQyEMZfL-G_Cj68T-NI_mUnDoFOAVJOGIKu2Hb8,338
|
53
54
|
linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=WuWGJjkWDQcEPL2bGk5fdGuhO0gQRUJzpo4CQHHxQNQ,385
|
54
55
|
linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=d1XFna2eOpkH8cgJML3vXwqGcocczvOcrbg6jjd4kP0,945
|
55
|
-
linkml/generators/pydanticgen/templates/module.py.jinja,sha256=
|
56
|
+
linkml/generators/pydanticgen/templates/module.py.jinja,sha256=nymjtSX4jqV9deSsXrsh1HWR90ygECHE4CV9MCyNrTY,615
|
56
57
|
linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=Yo4dubQal-HwEoJKztQkLYM5qCz1I8na2oaDlXuEpwU,532
|
57
58
|
linkml/generators/pythongen.py,sha256=IVloJ6v7QE7mdHygz0kZmcJ6D61usKffeyBmZjkArng,52879
|
58
59
|
linkml/generators/rdfgen.py,sha256=eQi3XXjWk6xliTLncQ4G0VYzGCJwCU_FFG-O7tA8DSA,2959
|
59
60
|
linkml/generators/shacl/__init__.py,sha256=O-M-wndKw8rMW-U8X3QCNHal-ErXP6uXZqxiQSa77l4,108
|
60
61
|
linkml/generators/shacl/ifabsent_processor.py,sha256=kV9BGA2ZPXLRfaFuW0o4jpkATvGggvrqpAo9c1UqWNE,2193
|
61
62
|
linkml/generators/shacl/shacl_data_type.py,sha256=BT3C9tdFyBQnuucPN7YQiFAKEa9yuzy-Q26X6dmOXgo,1827
|
62
|
-
linkml/generators/shaclgen.py,sha256=
|
63
|
+
linkml/generators/shaclgen.py,sha256=B9BkCzOQULjpCN10jbvazY6_WEkeVGO8lxEhr6pQ3_A,8849
|
63
64
|
linkml/generators/shexgen.py,sha256=MhB1HidCREMCJcDGBqutFQ0gWKKz7aSVw-0s-IHUMm4,9930
|
64
65
|
linkml/generators/sparqlgen.py,sha256=c7x8GFChKWprBx4rToSnu9qN8OleWTCenVUdZ8XSTWM,6138
|
65
66
|
linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
|
@@ -142,8 +143,8 @@ linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
142
143
|
linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
|
143
144
|
linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
|
144
145
|
linkml/workspaces/example_runner.py,sha256=hDk2RGxRE5-WYNriWknugtbm3Mhn8bFcAcXGMlkYxVk,11705
|
145
|
-
linkml-1.7.
|
146
|
-
linkml-1.7.
|
147
|
-
linkml-1.7.
|
148
|
-
linkml-1.7.
|
149
|
-
linkml-1.7.
|
146
|
+
linkml-1.7.11rc1.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
|
147
|
+
linkml-1.7.11rc1.dist-info/METADATA,sha256=rN4JFH3t8f6Mn3SjZlQYFUsj3leDC8GE47VrmWGRDA4,3728
|
148
|
+
linkml-1.7.11rc1.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
|
149
|
+
linkml-1.7.11rc1.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
150
|
+
linkml-1.7.11rc1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|