linkml 1.7.6__py3-none-any.whl → 1.7.8__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/__init__.py +14 -0
- linkml/generators/docgen/slot.md.jinja2 +4 -3
- linkml/generators/docgen/subset.md.jinja2 +7 -7
- linkml/generators/jsonldcontextgen.py +32 -12
- linkml/generators/jsonldgen.py +1 -1
- linkml/generators/owlgen.py +2 -0
- linkml/generators/pydanticgen/array.py +469 -0
- linkml/generators/pydanticgen/black.py +29 -0
- linkml/generators/pydanticgen/build.py +79 -0
- linkml/generators/pydanticgen/pydanticgen.py +74 -17
- linkml/generators/pydanticgen/template.py +89 -14
- linkml/generators/pydanticgen/templates/base_model.py.jinja +3 -1
- linkml/generators/pythongen.py +3 -0
- linkml/generators/rdfgen.py +9 -1
- linkml/generators/shacl/ifabsent_processor.py +22 -4
- linkml/generators/shaclgen.py +16 -5
- linkml/generators/sqlalchemygen.py +1 -0
- linkml/generators/sqltablegen.py +16 -1
- linkml/transformers/relmodel_transformer.py +21 -1
- linkml/utils/generator.py +10 -6
- linkml/utils/rawloader.py +5 -1
- linkml/utils/schemaloader.py +2 -1
- linkml/utils/sqlutils.py +13 -14
- linkml/validator/plugins/shacl_validation_plugin.py +10 -4
- {linkml-1.7.6.dist-info → linkml-1.7.8.dist-info}/METADATA +7 -4
- {linkml-1.7.6.dist-info → linkml-1.7.8.dist-info}/RECORD +29 -26
- {linkml-1.7.6.dist-info → linkml-1.7.8.dist-info}/LICENSE +0 -0
- {linkml-1.7.6.dist-info → linkml-1.7.8.dist-info}/WHEEL +0 -0
- {linkml-1.7.6.dist-info → linkml-1.7.8.dist-info}/entry_points.txt +0 -0
@@ -226,6 +226,7 @@ class RelationalModelTransformer:
|
|
226
226
|
|
227
227
|
# TODO: separate out the logic into separate testable methods
|
228
228
|
target_sv.set_modified()
|
229
|
+
multivalued_slots_original = []
|
229
230
|
# post-process target schema
|
230
231
|
for cn, c in target_sv.all_classes().items():
|
231
232
|
if self.foreign_key_policy == ForeignKeyPolicy.NO_FOREIGN_KEYS:
|
@@ -243,6 +244,7 @@ class RelationalModelTransformer:
|
|
243
244
|
slot.inlined or slot.inlined_as_list or "shared" in slot.annotations
|
244
245
|
)
|
245
246
|
if slot.multivalued:
|
247
|
+
multivalued_slots_original.append(slot.name)
|
246
248
|
slot.multivalued = False
|
247
249
|
slot_name = slot.name
|
248
250
|
sn_singular = slot.singular_name if slot.singular_name else slot.name
|
@@ -332,6 +334,7 @@ class RelationalModelTransformer:
|
|
332
334
|
# add PK and FK anns
|
333
335
|
target_sv.set_modified()
|
334
336
|
fk_policy = self.foreign_key_policy
|
337
|
+
forward_map = {}
|
335
338
|
for c in target.classes.values():
|
336
339
|
if self.foreign_key_policy == ForeignKeyPolicy.NO_FOREIGN_KEYS:
|
337
340
|
continue
|
@@ -356,14 +359,31 @@ class RelationalModelTransformer:
|
|
356
359
|
# if it is already an injected backref, no need to re-inject
|
357
360
|
if "backref" not in a.annotations:
|
358
361
|
del c.attributes[a.name]
|
362
|
+
original_name = a.name
|
359
363
|
if "forwardref" not in a.annotations:
|
360
|
-
add_annotation(a, "original_slot",
|
364
|
+
add_annotation(a, "original_slot", original_name)
|
361
365
|
a.alias = f"{a.name}_{tc_pk_slot.name}"
|
362
366
|
a.name = a.alias
|
363
367
|
c.attributes[a.name] = a
|
368
|
+
forward_map[original_name] = a.name
|
364
369
|
ann = Annotation("foreign_key", f"{tc.name}.{tc_pk_slot.name}")
|
365
370
|
a.annotations[ann.tag] = ann
|
366
371
|
target_sv.set_modified()
|
372
|
+
# Rewrite unique key constraints
|
373
|
+
# - if a slot has a range of object, it may be renamed, e.g. person => person_id
|
374
|
+
# - if a slot is multivalued then it is translated to backref and the UC must be dropped
|
375
|
+
removed_ucs = []
|
376
|
+
for uc_name, uc in c.unique_keys.items():
|
377
|
+
if any(sn in multivalued_slots_original for sn in uc.unique_key_slots):
|
378
|
+
logging.warning(
|
379
|
+
f"Cannot represent uniqueness constraint {uc_name}. "
|
380
|
+
f"one of the slots {uc.unique_key_slots} is multivalued"
|
381
|
+
)
|
382
|
+
removed_ucs.append(uc_name)
|
383
|
+
new_slot_names = [forward_map.get(sn, sn) for sn in uc.unique_key_slots]
|
384
|
+
uc.unique_key_slots = new_slot_names
|
385
|
+
for uc_name in removed_ucs:
|
386
|
+
del c.unique_keys[uc_name]
|
367
387
|
|
368
388
|
result = TransformationResult(target, mappings=mappings)
|
369
389
|
return result
|
linkml/utils/generator.py
CHANGED
@@ -30,7 +30,6 @@ from typing import Callable, ClassVar, Dict, List, Mapping, Optional, Set, TextI
|
|
30
30
|
import click
|
31
31
|
from click import Argument, Command, Option
|
32
32
|
from linkml_runtime import SchemaView
|
33
|
-
from linkml_runtime.dumpers import yaml_dumper
|
34
33
|
from linkml_runtime.linkml_model.meta import (
|
35
34
|
ClassDefinition,
|
36
35
|
ClassDefinitionName,
|
@@ -83,7 +82,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
83
82
|
For usage `Generator Docs <https://linkml.io/linkml/generators/>`_
|
84
83
|
"""
|
85
84
|
|
86
|
-
schema: Union[str, TextIO, SchemaDefinition, "Generator"]
|
85
|
+
schema: Union[str, TextIO, SchemaDefinition, "Generator", Path]
|
87
86
|
"""metamodel compliant schema. Can be URI, file name, actual schema, another generator, an
|
88
87
|
open file or a pre-parsed schema"""
|
89
88
|
|
@@ -130,7 +129,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
130
129
|
useuris: Optional[bool] = None
|
131
130
|
"""True means declared class slot uri's are used. False means use model uris"""
|
132
131
|
|
133
|
-
log_level: int = DEFAULT_LOG_LEVEL_INT
|
132
|
+
log_level: Optional[int] = DEFAULT_LOG_LEVEL_INT
|
134
133
|
"""Logging level, 0 is minimum"""
|
135
134
|
|
136
135
|
mergeimports: Optional[bool] = True
|
@@ -180,6 +179,8 @@ class Generator(metaclass=abc.ABCMeta):
|
|
180
179
|
def __post_init__(self) -> None:
|
181
180
|
if not self.logger:
|
182
181
|
self.logger = logging.getLogger()
|
182
|
+
if self.log_level is not None:
|
183
|
+
self.logger.setLevel(self.log_level)
|
183
184
|
if self.format is None:
|
184
185
|
self.format = self.valid_formats[0]
|
185
186
|
if self.format not in self.valid_formats:
|
@@ -191,7 +192,11 @@ class Generator(metaclass=abc.ABCMeta):
|
|
191
192
|
self.source_file_size = None
|
192
193
|
if self.requires_metamodel:
|
193
194
|
self.metamodel = _resolved_metamodel(self.mergeimports)
|
195
|
+
|
194
196
|
schema = self.schema
|
197
|
+
if isinstance(schema, Path):
|
198
|
+
schema = str(schema)
|
199
|
+
|
195
200
|
# TODO: remove aliasing
|
196
201
|
self.emit_metadata = self.metadata
|
197
202
|
if self.uses_schemaloader:
|
@@ -225,8 +230,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
225
230
|
# schemaloader based methods require schemas to have been created via SchemaLoader,
|
226
231
|
# which prepopulates some fields (e.g. definition_url). If the schema has not been processed through the
|
227
232
|
# loader, then roundtrip
|
228
|
-
|
229
|
-
schema = yaml_dumper.dumps(schema)
|
233
|
+
schema = schema._as_dict
|
230
234
|
loader = SchemaLoader(
|
231
235
|
schema,
|
232
236
|
self.base_dir,
|
@@ -684,7 +688,7 @@ class Generator(metaclass=abc.ABCMeta):
|
|
684
688
|
|
685
689
|
def slot_name(self, name: str) -> str:
|
686
690
|
"""
|
687
|
-
Return the underscored version of the aliased slot name if name is a slot. Prepend
|
691
|
+
Return the underscored version of the aliased slot name if name is a slot. Prepend ``unknown_`` if the name
|
688
692
|
isn't valid.
|
689
693
|
"""
|
690
694
|
slot = self.slot_for(name)
|
linkml/utils/rawloader.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import copy
|
2
2
|
from datetime import datetime
|
3
|
+
from pathlib import Path
|
3
4
|
from typing import Optional, TextIO, Union
|
4
5
|
from urllib.parse import urlparse
|
5
6
|
|
@@ -29,7 +30,7 @@ SchemaDefinition.MissingRequiredField = mrf
|
|
29
30
|
|
30
31
|
|
31
32
|
def load_raw_schema(
|
32
|
-
data: Union[str, dict, TextIO],
|
33
|
+
data: Union[str, dict, TextIO, Path],
|
33
34
|
source_file: Optional[str] = None,
|
34
35
|
source_file_date: Optional[str] = None,
|
35
36
|
source_file_size: Optional[int] = None,
|
@@ -58,6 +59,9 @@ def load_raw_schema(
|
|
58
59
|
assert source_file_date is None, "source_file_date parameter not allowed if data is a file or URL"
|
59
60
|
assert source_file_size is None, "source_file_size parameter not allowed if data is a file or URL"
|
60
61
|
|
62
|
+
if isinstance(data, Path):
|
63
|
+
data = str(data)
|
64
|
+
|
61
65
|
# Convert the input into a valid SchemaDefinition
|
62
66
|
if isinstance(data, (str, dict, TextIO)):
|
63
67
|
# TODO: Build a generic loader that detects type from suffix or content and invokes the appropriate loader
|
linkml/utils/schemaloader.py
CHANGED
@@ -2,6 +2,7 @@ import logging
|
|
2
2
|
import os
|
3
3
|
from collections import OrderedDict
|
4
4
|
from copy import deepcopy
|
5
|
+
from pathlib import Path
|
5
6
|
from typing import Dict, Iterator, List, Mapping, Optional, Set, TextIO, Tuple, Union, cast
|
6
7
|
from urllib.parse import urlparse
|
7
8
|
|
@@ -32,7 +33,7 @@ from linkml.utils.schemasynopsis import SchemaSynopsis
|
|
32
33
|
class SchemaLoader:
|
33
34
|
def __init__(
|
34
35
|
self,
|
35
|
-
data: Union[str, TextIO, SchemaDefinition, dict],
|
36
|
+
data: Union[str, TextIO, SchemaDefinition, dict, Path],
|
36
37
|
base_dir: Optional[str] = None,
|
37
38
|
namespaces: Optional[Namespaces] = None,
|
38
39
|
useuris: Optional[bool] = None,
|
linkml/utils/sqlutils.py
CHANGED
@@ -58,16 +58,22 @@ class SQLStore:
|
|
58
58
|
- mapping your data/objects in any LinkML compliant data format (json. yaml, rdf) into ORM objects
|
59
59
|
"""
|
60
60
|
|
61
|
-
schema: Union[str, SchemaDefinition] = None
|
62
|
-
schemaview: SchemaView = None
|
63
|
-
engine: Engine = None
|
64
|
-
database_path: str = None
|
61
|
+
schema: Optional[Union[str, Path, SchemaDefinition]] = None
|
62
|
+
schemaview: Optional[SchemaView] = None
|
63
|
+
engine: Optional[Engine] = None
|
64
|
+
database_path: Union[str, Path] = None
|
65
65
|
use_memory: bool = False
|
66
66
|
"""https://docs.sqlalchemy.org/en/20/dialects/sqlite.html#using-a-memory-database-in-multiple-threads"""
|
67
67
|
|
68
|
-
module: ModuleType = None
|
69
|
-
native_module: ModuleType = None
|
70
|
-
include_schema_in_database: bool =
|
68
|
+
module: Optional[ModuleType] = None
|
69
|
+
native_module: Optional[ModuleType] = None
|
70
|
+
include_schema_in_database: bool = False
|
71
|
+
|
72
|
+
def __post_init__(self):
|
73
|
+
if self.database_path is None and not self.use_memory:
|
74
|
+
raise ValueError("Must have database path or use_memory must be True")
|
75
|
+
if self.schema is not None and self.schemaview is None:
|
76
|
+
self.schemaview = SchemaView(self.schema)
|
71
77
|
|
72
78
|
def db_exists(self, create=True, force=False) -> Optional[str]:
|
73
79
|
"""
|
@@ -117,8 +123,6 @@ class SQLStore:
|
|
117
123
|
"""
|
118
124
|
gen = SQLAlchemyGenerator(self.schema)
|
119
125
|
self.module = gen.compile_sqla(template=TemplateEnum.DECLARATIVE)
|
120
|
-
if self.schemaview is None:
|
121
|
-
self.schemaview = SchemaView(self.schema)
|
122
126
|
return self.module
|
123
127
|
|
124
128
|
def compile_native(self) -> ModuleType:
|
@@ -223,7 +227,6 @@ class SQLStore:
|
|
223
227
|
for n, nu_typ in inspect.getmembers(self.module):
|
224
228
|
# TODO: make more efficient
|
225
229
|
if n == typ.__name__:
|
226
|
-
# print(f'Creating {nu_typ} from: {inst_args}')
|
227
230
|
nu_obj = nu_typ(**inst_args)
|
228
231
|
return nu_obj
|
229
232
|
raise ValueError(f"Cannot find {typ.__name__} in {self.module}")
|
@@ -237,8 +240,6 @@ class SQLStore:
|
|
237
240
|
:param obj: sqla object
|
238
241
|
:return: native dataclass object
|
239
242
|
"""
|
240
|
-
if self.schemaview is None:
|
241
|
-
self.schemaview = SchemaView(self.schema)
|
242
243
|
typ = type(obj)
|
243
244
|
nm = self.schemaview.class_name_mappings()
|
244
245
|
if typ.__name__ in nm:
|
@@ -262,9 +263,7 @@ class SQLStore:
|
|
262
263
|
for n, nu_typ in inspect.getmembers(self.native_module):
|
263
264
|
# TODO: make more efficient
|
264
265
|
if n == typ.__name__:
|
265
|
-
# print(f'CREATING {nu_typ} FROM {inst_args}')
|
266
266
|
nu_obj = nu_typ(**inst_args)
|
267
|
-
# print(f'CREATED {nu_obj}')
|
268
267
|
return nu_obj
|
269
268
|
raise ValueError(f"Cannot find {typ.__name__} in {self.native_module}")
|
270
269
|
else:
|
@@ -34,21 +34,27 @@ class ShaclValidationPlugin(ValidationPlugin):
|
|
34
34
|
self.closed = closed
|
35
35
|
self.shacl_path = shacl_path
|
36
36
|
self.raise_on_conversion_error = raise_on_conversion_error
|
37
|
+
self._loaded_graphs = {}
|
37
38
|
|
38
39
|
def _shacl_graph(self, context: ValidationContext) -> Optional[rdflib.Graph]:
|
39
40
|
g = rdflib.Graph()
|
40
41
|
if self.shacl_path:
|
41
42
|
g.parse(str(self.shacl_path))
|
42
43
|
else:
|
43
|
-
|
44
|
-
|
44
|
+
schema_hash = hash(str(context._schema))
|
45
|
+
if schema_hash in self._loaded_graphs:
|
46
|
+
g = self._loaded_graphs[schema_hash]
|
47
|
+
else:
|
48
|
+
gen = ShaclGenerator(context._schema)
|
49
|
+
g = gen.as_graph()
|
50
|
+
self._loaded_graphs[schema_hash] = g
|
45
51
|
return g
|
46
52
|
|
47
53
|
def process(self, instance: Any, context: ValidationContext) -> Iterator[ValidationResult]:
|
48
|
-
"""Perform
|
54
|
+
"""Perform SHACL Schema validation on the provided instance
|
49
55
|
|
50
56
|
:param instance: The instance to validate
|
51
|
-
:param context: The validation context which provides a
|
57
|
+
:param context: The validation context which provides a SHACL artifact
|
52
58
|
:return: Iterator over validation results
|
53
59
|
:rtype: Iterator[ValidationResult]
|
54
60
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: linkml
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.8
|
4
4
|
Summary: Linked Open Data Modeling Language
|
5
5
|
Home-page: https://linkml.io/linkml/
|
6
6
|
Keywords: schema,linked data,data modeling,rdf,owl,biolink
|
@@ -19,12 +19,15 @@ Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
22
23
|
Classifier: Programming Language :: Python :: 3.8
|
23
24
|
Classifier: Programming Language :: Python :: 3.9
|
24
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
26
|
+
Provides-Extra: black
|
25
27
|
Provides-Extra: shacl
|
26
28
|
Provides-Extra: tests
|
27
29
|
Requires-Dist: antlr4-python3-runtime (>=4.9.0,<4.10)
|
30
|
+
Requires-Dist: black (>=24.0.0) ; extra == "black" or extra == "tests"
|
28
31
|
Requires-Dist: click (>=7.0)
|
29
32
|
Requires-Dist: graphviz (>=0.10.1)
|
30
33
|
Requires-Dist: hbreader
|
@@ -33,11 +36,11 @@ Requires-Dist: jinja2 (>=3.1.0)
|
|
33
36
|
Requires-Dist: jsonasobj2 (>=1.0.3,<2.0.0)
|
34
37
|
Requires-Dist: jsonschema[format] (>=4.0.0)
|
35
38
|
Requires-Dist: linkml-dataops
|
36
|
-
Requires-Dist: linkml-runtime (>=1.7.
|
39
|
+
Requires-Dist: linkml-runtime (>=1.7.4)
|
37
40
|
Requires-Dist: openpyxl
|
38
41
|
Requires-Dist: parse
|
39
42
|
Requires-Dist: prefixcommons (>=0.1.7)
|
40
|
-
Requires-Dist: prefixmaps (>=0.
|
43
|
+
Requires-Dist: prefixmaps (>=0.2.2)
|
41
44
|
Requires-Dist: pydantic (>=1.0.0,<3.0.0)
|
42
45
|
Requires-Dist: pyjsg (>=0.11.6)
|
43
46
|
Requires-Dist: pyshacl (>=0.25.0,<0.26.0) ; extra == "shacl" or extra == "tests"
|
@@ -48,7 +51,7 @@ Requires-Dist: pyyaml
|
|
48
51
|
Requires-Dist: rdflib (>=6.0.0)
|
49
52
|
Requires-Dist: requests (>=2.22)
|
50
53
|
Requires-Dist: sqlalchemy (>=1.4.31)
|
51
|
-
Requires-Dist: typing-extensions (>=4.
|
54
|
+
Requires-Dist: typing-extensions (>=4.4.0) ; python_version < "3.9"
|
52
55
|
Requires-Dist: watchdog (>=0.9.0)
|
53
56
|
Project-URL: Documentation, https://linkml.io/linkml/
|
54
57
|
Project-URL: Repository, https://github.com/linkml/linkml
|
@@ -1,4 +1,4 @@
|
|
1
|
-
linkml/__init__.py,sha256=
|
1
|
+
linkml/__init__.py,sha256=0REu65rXiOk3F1CYLzq60HiSZ2DfFySfGS6QFljZ01s,3663
|
2
2
|
linkml/_version.py,sha256=udxv6OEqcE89DTVMYPtetXYg8IA8Sgc6yW26-6f8C3M,310
|
3
3
|
linkml/generators/PythonGenNotes.md,sha256=wb9BPLLhF6378OKLbwSBAwmniLpwrcT5_bbfCHfLme8,51006
|
4
4
|
linkml/generators/README.md,sha256=RMzT8EblC_GEdPy5WyfXHDBXlFI6k6mz3Cx2sdpcyWI,4438
|
@@ -13,8 +13,8 @@ linkml/generators/docgen/enum.md.jinja2,sha256=mXnUrRkleY2bOTEyAZ5c4pcUnqhs6BNa8
|
|
13
13
|
linkml/generators/docgen/index.md.jinja2,sha256=wXUYTmayPLFltC0vbGE_Mf6m3GkkWav7FOEjCvEpHp4,1466
|
14
14
|
linkml/generators/docgen/index.tex.jinja2,sha256=Go_EA-_N4JUpbOYbk3OY11mz5yV70VF2l2sMtgIPWw4,501
|
15
15
|
linkml/generators/docgen/schema.md.jinja2,sha256=xlENfnzNRYgPT_0tdqNFxgklVM4Qf5BuzhFVvSMDuxs,70
|
16
|
-
linkml/generators/docgen/slot.md.jinja2,sha256=
|
17
|
-
linkml/generators/docgen/subset.md.jinja2,sha256=
|
16
|
+
linkml/generators/docgen/slot.md.jinja2,sha256=ZGa-kaNvi5LknvFRIjKQyRpSynr1SlkLrpEmWDNPwDA,3226
|
17
|
+
linkml/generators/docgen/subset.md.jinja2,sha256=EPln_fjlhlkmwEGEp2iPX-9Xm2vVodPZLlRBlYCB_sA,2705
|
18
18
|
linkml/generators/docgen/type.md.jinja2,sha256=QmCMJZrFwP33eHkggBVtypbyrxTb-XZn9vHOYojVaYk,635
|
19
19
|
linkml/generators/docgen.py,sha256=dz7OWxclX306EweVIgC765h3NKtJTRg0TPnqmltWygs,34347
|
20
20
|
linkml/generators/dotgen.py,sha256=kzp1EYtF8bBqOuycJokDmsvHVDVkkW-J-6-MiUhwJH0,5013
|
@@ -26,24 +26,27 @@ linkml/generators/graphqlgen.py,sha256=6qZpI0rwg3ypsv_KrLVzXgdsJfR8LNPqgMwaRwzwn
|
|
26
26
|
linkml/generators/javagen/example_template.java.jinja2,sha256=ec4CVTv_0zS7V5Y-1E6H4lRraya10gfX7BEMBlu38X4,444
|
27
27
|
linkml/generators/javagen/java_record_template.jinja2,sha256=OQZffLSy_xR3FIhQMltvrYyVeut7l2Q-tzK7AOiVmWs,1729
|
28
28
|
linkml/generators/javagen.py,sha256=KxwupMztyCRHcSsbtTnOovuj1WamsAny0mxbYWvTiDs,5324
|
29
|
-
linkml/generators/jsonldcontextgen.py,sha256=
|
30
|
-
linkml/generators/jsonldgen.py,sha256=
|
29
|
+
linkml/generators/jsonldcontextgen.py,sha256=N_XWCx_1eS5KcWlzlyl79C-dW0gfe32v886UskD1iTU,8644
|
30
|
+
linkml/generators/jsonldgen.py,sha256=646aQc27CkuxxkDAJHSBcivCDwNAPl7OOT01OBR2AOI,7728
|
31
31
|
linkml/generators/jsonschemagen.py,sha256=XOsYIrpA6BwtAcfh8GNGduIjpuPAsF2f_PQ1mghj_WU,27455
|
32
32
|
linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
linkml/generators/linkmlgen.py,sha256=1_Kt_7rD42WvCTjq0yaq1Of7jEDZR_uusyzAT-qWMHk,3471
|
34
34
|
linkml/generators/markdowngen.py,sha256=dDMyusNXLvM2raIW-_vd2AQBhDHn0P_rMeDq3QFuacs,32926
|
35
35
|
linkml/generators/namespacegen.py,sha256=vVcIyM0zlKd7XRvtdzwTwHjG4Pg49801gy4FUmjJlqQ,6450
|
36
36
|
linkml/generators/oocodegen.py,sha256=r73QI08ajbTZTobc9OIG6BMWZft3zdu76vKVR33pyYg,7774
|
37
|
-
linkml/generators/owlgen.py,sha256=
|
37
|
+
linkml/generators/owlgen.py,sha256=NqEvuJOUh4ZEe5tVeVol3SHy7zpCagEhso7Q1GLyIqY,54458
|
38
38
|
linkml/generators/plantumlgen.py,sha256=tk-_XJtBA5EqYJSUTc3bdMdCwqlC-rc9VYO9A2V_HpM,14895
|
39
39
|
linkml/generators/prefixmapgen.py,sha256=L9TccwKNHEguW0ox5qgf_GhIuqauYTI8d4jSjeqdkWo,4720
|
40
40
|
linkml/generators/projectgen.py,sha256=OuT_AneoZFNMCn50GllfZafadUHt50u61JcftM2eed4,9750
|
41
41
|
linkml/generators/protogen.py,sha256=5UxThsFDVyDTzzTDh77Z0anx4-tLgz8kQQ-e7ywIqwI,2290
|
42
42
|
linkml/generators/pydanticgen/__init__.py,sha256=uKGaaQSaeKqinHImXGFE448i-t8Oi0No8suIO76sep8,629
|
43
|
-
linkml/generators/pydanticgen/
|
44
|
-
linkml/generators/pydanticgen/
|
43
|
+
linkml/generators/pydanticgen/array.py,sha256=1QWWgz46yVmWkdNauI6Kjkbx3kexp-l210nOILoHJ18,19506
|
44
|
+
linkml/generators/pydanticgen/black.py,sha256=c-Hgaao9hd4nPMU9w0Hmg2j4Wc81IcY0zAfppQPr1cM,721
|
45
|
+
linkml/generators/pydanticgen/build.py,sha256=Ia8qy4C16b-KqO_fw4tGQW_Eo4grCVyX7RsuJ3uRTtk,2681
|
46
|
+
linkml/generators/pydanticgen/pydanticgen.py,sha256=Gnii-UuKc7gyEpaN5XbRyzWp0v1F5eAUVVzMhFGX2rM,29863
|
47
|
+
linkml/generators/pydanticgen/template.py,sha256=fAqRofLm7N94xUqXjkStdmugcxGQfiioGkxdIhLByik,19990
|
45
48
|
linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=AlH_QFJJkONpzXQRGqnW4ufmjp9s9E7Q9W5r8ykNGeQ,443
|
46
|
-
linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=
|
49
|
+
linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=48y64MnC9rjNSV-nKLMeDuHN4gm15UsInhnKxh65zoM,834
|
47
50
|
linkml/generators/pydanticgen/templates/class.py.jinja,sha256=RIdkqdZS9rDILUuVqDIAWK_vATGkirLbPhdHSyHDAbY,565
|
48
51
|
linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
|
49
52
|
linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=572XFQyEMZfL-G_Cj68T-NI_mUnDoFOAVJOGIKu2Hb8,338
|
@@ -51,19 +54,19 @@ linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=WuWGJjkWDQcEPL2bG
|
|
51
54
|
linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=d1XFna2eOpkH8cgJML3vXwqGcocczvOcrbg6jjd4kP0,945
|
52
55
|
linkml/generators/pydanticgen/templates/module.py.jinja,sha256=SkmtWtQS7D-xBiZI-sFiYC3WYPKi3VJCj_KtaMVxexM,438
|
53
56
|
linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=Yo4dubQal-HwEoJKztQkLYM5qCz1I8na2oaDlXuEpwU,532
|
54
|
-
linkml/generators/pythongen.py,sha256=
|
55
|
-
linkml/generators/rdfgen.py,sha256=
|
57
|
+
linkml/generators/pythongen.py,sha256=4Tw4Zz5GPvvbvk10zrD1yJFdxY3cvXJYqmFKrms8aUs,52915
|
58
|
+
linkml/generators/rdfgen.py,sha256=fPhTrMzUM6dkg3HllgD6biuRJl8afIfj7ZWu9e56MKo,2973
|
56
59
|
linkml/generators/shacl/__init__.py,sha256=O-M-wndKw8rMW-U8X3QCNHal-ErXP6uXZqxiQSa77l4,108
|
57
|
-
linkml/generators/shacl/ifabsent_processor.py,sha256=
|
60
|
+
linkml/generators/shacl/ifabsent_processor.py,sha256=kV9BGA2ZPXLRfaFuW0o4jpkATvGggvrqpAo9c1UqWNE,2193
|
58
61
|
linkml/generators/shacl/shacl_data_type.py,sha256=BT3C9tdFyBQnuucPN7YQiFAKEa9yuzy-Q26X6dmOXgo,1827
|
59
|
-
linkml/generators/shaclgen.py,sha256=
|
62
|
+
linkml/generators/shaclgen.py,sha256=P3Kf10a0_1MCk4-prai9rrgPRHnQqtgYoXof0VIVyws,8771
|
60
63
|
linkml/generators/shexgen.py,sha256=KzhaL-A4R4peSdhY6nlDWmS-DPfnZMxMzrXhHGnA_Ag,9874
|
61
64
|
linkml/generators/sparqlgen.py,sha256=c7x8GFChKWprBx4rToSnu9qN8OleWTCenVUdZ8XSTWM,6138
|
62
65
|
linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
|
63
66
|
linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
|
64
67
|
linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
|
65
|
-
linkml/generators/sqlalchemygen.py,sha256=
|
66
|
-
linkml/generators/sqltablegen.py,sha256=
|
68
|
+
linkml/generators/sqlalchemygen.py,sha256=5J9eQhTz7Ug-7WhZPv6zIaAbf7xlLi-0xMequ67pvgA,9320
|
69
|
+
linkml/generators/sqltablegen.py,sha256=87057FJi9EUVPXOjRfHuSqY0lKmepXRNQsose2fGts4,12343
|
67
70
|
linkml/generators/sssomgen.py,sha256=yur3q7so9uwIELWZaZRzkJwNbz_ppBL7IQki9XLIM3k,6879
|
68
71
|
linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
|
69
72
|
linkml/generators/summarygen.py,sha256=crH_Hegd4Z7G7byUtgyXoP2XtG_4iblzZsu_pE4aQrk,2887
|
@@ -92,7 +95,7 @@ linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,862
|
|
92
95
|
linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
96
|
linkml/transformers/logical_model_transformer.py,sha256=Luc8cKWIGrRAXQ9DSLA03fgpIolLpsTT19OV9Coolvk,26522
|
94
97
|
linkml/transformers/model_transformer.py,sha256=tK_MpRDI-q2qfe8KHT6qJHP8ZruKjYx1FcM-Fnjse-E,678
|
95
|
-
linkml/transformers/relmodel_transformer.py,sha256=
|
98
|
+
linkml/transformers/relmodel_transformer.py,sha256=aiSI2xaqRz4f0Z_0WFaBP5bknzX0pTnvxsR5mESFysg,18857
|
96
99
|
linkml/transformers/schema_renamer.py,sha256=DYRbgL9j41M9FdbHYLY3u4YIdDM98laD3cv_lHcgWHQ,5275
|
97
100
|
linkml/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
98
101
|
linkml/utils/cli_utils.py,sha256=MdVbox1qr6kDUHUCWAmFhV-D6ebs_nn8vVwB8KDQfew,742
|
@@ -100,17 +103,17 @@ linkml/utils/converter.py,sha256=snAF-pgZBSi4ANiaKXxqtZk5w3qonJjTfI4X5OVLmUE,628
|
|
100
103
|
linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
|
101
104
|
linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
|
102
105
|
linkml/utils/execute_tutorial.py,sha256=T4kHTSyz3ItJGEUZxVjR-3yLVKnOr5Ix4NMGE47-IuE,6912
|
103
|
-
linkml/utils/generator.py,sha256=
|
106
|
+
linkml/utils/generator.py,sha256=ytpcq3s7cJMYpLAcL2H_F-1FWbog3FlUXkylm1It25M,38394
|
104
107
|
linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
|
105
108
|
linkml/utils/ifabsent_functions.py,sha256=IkcBcmRYu8sllx7_mTCqu4aHfTxX2AnQoccZ1KOODds,5843
|
106
109
|
linkml/utils/logictools.py,sha256=GSmBiobC49TcQjE08RtXEE3JwJEOV7eEREio25uJiFs,21184
|
107
110
|
linkml/utils/mergeutils.py,sha256=QVm2iQB4v_L2rSvPBsPe9C865R03BgV3TzlPoTTTwWQ,9044
|
108
|
-
linkml/utils/rawloader.py,sha256=
|
111
|
+
linkml/utils/rawloader.py,sha256=nUB8Gfn8yEVwyo6bx0TtB2mBGkilC-fybi0xvQ73Gks,4417
|
109
112
|
linkml/utils/schema_builder.py,sha256=4qhrur8O0xRZnPm7H1h2BZmTkut5R4q-IE_1KKiHy_c,9937
|
110
113
|
linkml/utils/schema_fixer.py,sha256=Uz8M3AOQ_BputJr1f6lbfk1iyvmANUNG80-0B3BQKJ8,16761
|
111
|
-
linkml/utils/schemaloader.py,sha256=
|
114
|
+
linkml/utils/schemaloader.py,sha256=5fLM99v6RZ0OW4JHA0UAd_mtS_2HNubXAjlF5v8vHcw,46093
|
112
115
|
linkml/utils/schemasynopsis.py,sha256=jKf5ZJxpNgSZ5x9oAcdGO3m1IwzcIU2Ni1ugm0SQq1g,18447
|
113
|
-
linkml/utils/sqlutils.py,sha256=
|
116
|
+
linkml/utils/sqlutils.py,sha256=Cwoaz44MLcvAGUEBshT4jtn0Z3w7jVOp85zGkd6FTHY,17071
|
114
117
|
linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
|
115
118
|
linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
|
116
119
|
linkml/validator/__init__.py,sha256=djKc1IyxGKvVYaX5jSxsqjfcEYaw3rFgKbFJxI2wDNk,5002
|
@@ -125,7 +128,7 @@ linkml/validator/plugins/__init__.py,sha256=F7Un7bfdpSRXvk8LTb7Z4Q22rCtJJKjNkqUf
|
|
125
128
|
linkml/validator/plugins/jsonschema_validation_plugin.py,sha256=hMPlCyAdMg_N_OHiHMaxcG0fsOA50V4oBNqorNz_oqE,2528
|
126
129
|
linkml/validator/plugins/pydantic_validation_plugin.py,sha256=C-Vp74bz5oqp5V-iuhXW8p0PPDoFY8NCU5x36Ur5Og4,1985
|
127
130
|
linkml/validator/plugins/recommended_slots_plugin.py,sha256=kOdoYQyye47nLA7BjorVmydS84nGpiVy3MoCbPq1Ymo,2308
|
128
|
-
linkml/validator/plugins/shacl_validation_plugin.py,sha256=
|
131
|
+
linkml/validator/plugins/shacl_validation_plugin.py,sha256=X6h1O54m9P5USvqCvNqELD0YpzXkE6UrmxnV0ukU6E4,3888
|
129
132
|
linkml/validator/plugins/validation_plugin.py,sha256=9SMHF8b2bgG9-8351e8bY676e0A4aEBJSXvMjMF5kXg,1548
|
130
133
|
linkml/validator/report.py,sha256=kkkuh-IZF9--cO-2wGjwP3PDLvOcjjvC8AOlxXUIOAM,870
|
131
134
|
linkml/validator/validation_context.py,sha256=Pmccq-LQ9iEeLyZhamp3mKjjtwp4ji1hIe5TT05AUT4,2732
|
@@ -138,8 +141,8 @@ linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
138
141
|
linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
|
139
142
|
linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
|
140
143
|
linkml/workspaces/example_runner.py,sha256=OmC_yZLIb4KXGQrstBVZL0UAQ9ZAaraguQF0RSf-snk,11611
|
141
|
-
linkml-1.7.
|
142
|
-
linkml-1.7.
|
143
|
-
linkml-1.7.
|
144
|
-
linkml-1.7.
|
145
|
-
linkml-1.7.
|
144
|
+
linkml-1.7.8.dist-info/METADATA,sha256=7Nrt0dXBtqeom1Q3W5wGtdrLzzEcIhoURNoTaZfRyiY,3724
|
145
|
+
linkml-1.7.8.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
146
|
+
linkml-1.7.8.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
|
147
|
+
linkml-1.7.8.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
|
148
|
+
linkml-1.7.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|