linkml 1.7.5__py3-none-any.whl → 1.7.7__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 (44) hide show
  1. linkml/generators/__init__.py +2 -0
  2. linkml/generators/docgen/class.md.jinja2 +15 -2
  3. linkml/generators/docgen/slot.md.jinja2 +18 -4
  4. linkml/generators/docgen.py +17 -3
  5. linkml/generators/jsonldcontextgen.py +40 -17
  6. linkml/generators/jsonldgen.py +3 -1
  7. linkml/generators/owlgen.py +16 -0
  8. linkml/generators/prefixmapgen.py +5 -4
  9. linkml/generators/projectgen.py +14 -2
  10. linkml/generators/pydanticgen/__init__.py +29 -0
  11. linkml/generators/pydanticgen/array.py +457 -0
  12. linkml/generators/pydanticgen/black.py +29 -0
  13. linkml/generators/pydanticgen/build.py +79 -0
  14. linkml/generators/{pydanticgen.py → pydanticgen/pydanticgen.py} +252 -304
  15. linkml/generators/pydanticgen/template.py +577 -0
  16. linkml/generators/pydanticgen/templates/attribute.py.jinja +10 -0
  17. linkml/generators/pydanticgen/templates/base_model.py.jinja +29 -0
  18. linkml/generators/pydanticgen/templates/class.py.jinja +21 -0
  19. linkml/generators/pydanticgen/templates/conditional_import.py.jinja +9 -0
  20. linkml/generators/pydanticgen/templates/enum.py.jinja +16 -0
  21. linkml/generators/pydanticgen/templates/footer.py.jinja +13 -0
  22. linkml/generators/pydanticgen/templates/imports.py.jinja +31 -0
  23. linkml/generators/pydanticgen/templates/module.py.jinja +27 -0
  24. linkml/generators/pydanticgen/templates/validator.py.jinja +15 -0
  25. linkml/generators/pythongen.py +13 -7
  26. linkml/generators/shacl/__init__.py +3 -0
  27. linkml/generators/shacl/ifabsent_processor.py +59 -0
  28. linkml/generators/shacl/shacl_data_type.py +40 -0
  29. linkml/generators/shaclgen.py +105 -82
  30. linkml/generators/shexgen.py +1 -1
  31. linkml/generators/sqlalchemygen.py +1 -1
  32. linkml/generators/sqltablegen.py +32 -22
  33. linkml/generators/terminusdbgen.py +7 -1
  34. linkml/linter/config/datamodel/config.py +8 -0
  35. linkml/linter/rules.py +11 -2
  36. linkml/utils/generator.py +7 -6
  37. linkml/utils/ifabsent_functions.py +7 -9
  38. linkml/utils/schemaloader.py +1 -9
  39. linkml/utils/sqlutils.py +39 -25
  40. {linkml-1.7.5.dist-info → linkml-1.7.7.dist-info}/METADATA +9 -4
  41. {linkml-1.7.5.dist-info → linkml-1.7.7.dist-info}/RECORD +44 -27
  42. {linkml-1.7.5.dist-info → linkml-1.7.7.dist-info}/LICENSE +0 -0
  43. {linkml-1.7.5.dist-info → linkml-1.7.7.dist-info}/WHEEL +0 -0
  44. {linkml-1.7.5.dist-info → linkml-1.7.7.dist-info}/entry_points.txt +0 -0
linkml/utils/generator.py CHANGED
@@ -83,11 +83,11 @@ class Generator(metaclass=abc.ABCMeta):
83
83
  For usage `Generator Docs <https://linkml.io/linkml/generators/>`_
84
84
  """
85
85
 
86
- # ClassVars
87
86
  schema: Union[str, TextIO, SchemaDefinition, "Generator"]
88
87
  """metamodel compliant schema. Can be URI, file name, actual schema, another generator, an
89
88
  open file or a pre-parsed schema"""
90
89
 
90
+ # ClassVars
91
91
  generatorname: ClassVar[str] = None
92
92
  """ Name of the generator. Override with os.path.basename(__file__)"""
93
93
 
@@ -159,7 +159,8 @@ class Generator(metaclass=abc.ABCMeta):
159
159
  """True means output is to a directory, False is to stdout"""
160
160
 
161
161
  base_dir: str = None # Base directory of schema
162
- """Working directory or base URL of sources"""
162
+ """Working directory or base URL of sources.
163
+ Setting this is necessary for correct retrieval of relative imports."""
163
164
 
164
165
  metamodel_name_map: Dict[str, str] = None
165
166
  """Allows mapping of names of metamodel elements such as slot, etc"""
@@ -196,8 +197,8 @@ class Generator(metaclass=abc.ABCMeta):
196
197
  if self.uses_schemaloader:
197
198
  self._initialize_using_schemaloader(schema)
198
199
  else:
199
- logging.info(f"Using SchemaView with im={self.importmap}")
200
- self.schemaview = SchemaView(schema, importmap=self.importmap)
200
+ logging.info(f"Using SchemaView with im={self.importmap} // base_dir={self.base_dir}")
201
+ self.schemaview = SchemaView(schema, importmap=self.importmap, base_dir=self.base_dir)
201
202
  self.schema = self.schemaview.schema
202
203
  self._init_namespaces()
203
204
 
@@ -683,7 +684,7 @@ class Generator(metaclass=abc.ABCMeta):
683
684
 
684
685
  def slot_name(self, name: str) -> str:
685
686
  """
686
- Return the underscored version of the aliased slot name if name is a slot. Prepend "unknown_" if the name
687
+ Return the underscored version of the aliased slot name if name is a slot. Prepend ``unknown_`` if the name
687
688
  isn't valid.
688
689
  """
689
690
  slot = self.slot_for(name)
@@ -705,7 +706,7 @@ class Generator(metaclass=abc.ABCMeta):
705
706
 
706
707
  :param el_or_elname: element or name to map
707
708
  :param is_range_name: True means that we're looking for a class or type. False means Slot or Subset. Only
708
- applies if el_or_elname is an ElementName (otherwise we know what we've got
709
+ applies if el_or_elname is an ElementName (otherwise we know what we've got
709
710
  :return: Formatted name if type can be known else None
710
711
  """
711
712
  if isinstance(el_or_elname, str):
@@ -1,5 +1,5 @@
1
1
  import re
2
- from typing import Callable, List, Match, Optional, Text, Tuple
2
+ from typing import Callable, List, Match, Optional, Text, Tuple, Union
3
3
 
4
4
  from linkml_runtime.linkml_model.meta import ClassDefinition, SlotDefinition
5
5
  from linkml_runtime.utils.formatutils import sfx
@@ -77,12 +77,13 @@ default_library: List[
77
77
  (
78
78
  r"date\((\d{4})-(\d{2})-(\d{2})\)",
79
79
  False,
80
- lambda m, __, ___, ____: f"datetime.date({m[1]}, {m[2]}, {m[3]})",
80
+ lambda m, __, ___, ____: f"date({int(m[1])}, {int(m[2])}, {int(m[3])})",
81
81
  ),
82
82
  (
83
83
  r"datetime\((\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z\)",
84
84
  False,
85
- lambda m, __, ___, ____: f"datetime.datetime({m[1]}, {m[2]}, {m[3]}, {m[4]}, {m[5]}, {m[6]})",
85
+ lambda m, __, ___, ____: f"datetime({int(m[1])}, {int(m[2])}, {int(m[3])}, "
86
+ f"{int(m[4])}, {int(m[5])}, {int(m[6])})",
86
87
  ),
87
88
  # TODO: We have to make the real URI available before any of these can work
88
89
  # ("class_uri", True,
@@ -113,12 +114,9 @@ default_library: List[
113
114
 
114
115
  def isabsent_match(
115
116
  txt: Text,
116
- ) -> Optional[
117
- Tuple[
118
- Match[str],
119
- bool,
120
- Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str],
121
- ]
117
+ ) -> Union[
118
+ Tuple[Match[str], bool, Callable[[Match[str], SchemaLoader, ClassDefinition, SlotDefinition], str]],
119
+ Tuple[None, None, None],
122
120
  ]:
123
121
  txt = str(txt)
124
122
  for pattern, postinit, f in default_library:
@@ -118,7 +118,7 @@ class SchemaLoader:
118
118
  sname = self.importmap.get(str(sname), sname) # It may also use URI or other forms
119
119
  import_schemadefinition = load_raw_schema(
120
120
  sname + ".yaml",
121
- base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else None,
121
+ base_dir=os.path.dirname(self.schema.source_file) if self.schema.source_file else self.base_dir,
122
122
  merge_modules=self.merge_modules,
123
123
  emit_metadata=self.emit_metadata,
124
124
  )
@@ -351,14 +351,6 @@ class SchemaLoader:
351
351
  f"slot: {slot.name} - unrecognized domain ({slot.domain})",
352
352
  slot.domain,
353
353
  )
354
- if slot.ifabsent:
355
- from linkml.utils.ifabsent_functions import isabsent_match
356
-
357
- if isabsent_match(slot.ifabsent) is None:
358
- self.raise_value_error(
359
- f"Unrecognized ifabsent action for slot '{slot.name}': '{slot.ifabsent}'",
360
- slot.ifabsent,
361
- )
362
354
 
363
355
  # Keys and identifiers must be present
364
356
  if bool(slot.key or slot.identifier):
linkml/utils/sqlutils.py CHANGED
@@ -324,9 +324,15 @@ def main(verbose: int, quiet: bool, csv_field_size_limit: int):
324
324
  show_default=True,
325
325
  help="Force creation of a database if it does not exist",
326
326
  )
327
- @click.argument("input")
327
+ @click.option(
328
+ "--glob/--no-glob",
329
+ default=False,
330
+ show_default=True,
331
+ help="Treat input as a quoted glob expression, e.g. 'data/*.json'",
332
+ )
333
+ @click.argument("inputs", nargs=-1)
328
334
  def dump(
329
- input,
335
+ inputs,
330
336
  module,
331
337
  db,
332
338
  target_class,
@@ -334,6 +340,7 @@ def dump(
334
340
  schema=None,
335
341
  validate=None,
336
342
  force: bool = None,
343
+ glob: bool = None,
337
344
  index_slot=None,
338
345
  ) -> None:
339
346
  """
@@ -359,34 +366,41 @@ def dump(
359
366
  if target_class is None:
360
367
  raise Exception("target class not specified and could not be inferred")
361
368
  py_target_class = python_module.__dict__[target_class]
362
- input_format = _get_format(input, input_format)
363
- loader = get_loader(input_format)
364
-
365
- inargs = {}
366
- if datautils._is_rdf_format(input_format):
367
- if sv is None:
368
- raise Exception("Must pass schema arg")
369
- inargs["schemaview"] = sv
370
- inargs["fmt"] = input_format
371
- if _is_xsv(input_format):
372
- if index_slot is None:
373
- index_slot = infer_index_slot(sv, target_class)
374
- if index_slot is None:
375
- raise Exception("--index-slot is required for CSV input")
376
- inargs["index_slot"] = index_slot
377
- inargs["schema"] = schema
378
- obj = loader.load(source=input, target_class=py_target_class, **inargs)
379
- if validate:
380
- if schema is None:
381
- raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
382
- # TODO: use validator framework
383
- validation.validate_object(obj, schema)
384
369
 
385
370
  endpoint = SQLStore(schema, database_path=db, include_schema_in_database=False)
386
371
  endpoint.native_module = python_module
387
372
  endpoint.db_exists(force=force)
388
373
  endpoint.compile()
389
- endpoint.dump(obj)
374
+
375
+ if glob:
376
+ import glob
377
+
378
+ inputs = [item for input in inputs for item in glob.glob(input)]
379
+ for input in inputs:
380
+ logging.info(f"Loading: {input}")
381
+ input_format = _get_format(input, input_format)
382
+ loader = get_loader(input_format)
383
+
384
+ inargs = {}
385
+ if datautils._is_rdf_format(input_format):
386
+ if sv is None:
387
+ raise Exception("Must pass schema arg")
388
+ inargs["schemaview"] = sv
389
+ inargs["fmt"] = input_format
390
+ if _is_xsv(input_format):
391
+ if index_slot is None:
392
+ index_slot = infer_index_slot(sv, target_class)
393
+ if index_slot is None:
394
+ raise Exception("--index-slot is required for CSV input")
395
+ inargs["index_slot"] = index_slot
396
+ inargs["schema"] = schema
397
+ obj = loader.load(source=input, target_class=py_target_class, **inargs)
398
+ if validate:
399
+ if schema is None:
400
+ raise Exception("--schema must be passed in order to validate. Suppress with --no-validate")
401
+ # TODO: use validator framework
402
+ validation.validate_object(obj, schema)
403
+ endpoint.dump(obj)
390
404
 
391
405
 
392
406
  @main.command()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: linkml
3
- Version: 1.7.5
3
+ Version: 1.7.7
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,10 +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
27
+ Provides-Extra: shacl
28
+ Provides-Extra: tests
25
29
  Requires-Dist: antlr4-python3-runtime (>=4.9.0,<4.10)
30
+ Requires-Dist: black (>=24.0.0) ; extra == "black" or extra == "tests"
26
31
  Requires-Dist: click (>=7.0)
27
32
  Requires-Dist: graphviz (>=0.10.1)
28
33
  Requires-Dist: hbreader
@@ -31,13 +36,14 @@ Requires-Dist: jinja2 (>=3.1.0)
31
36
  Requires-Dist: jsonasobj2 (>=1.0.3,<2.0.0)
32
37
  Requires-Dist: jsonschema[format] (>=4.0.0)
33
38
  Requires-Dist: linkml-dataops
34
- Requires-Dist: linkml-runtime (>=1.7.0)
39
+ Requires-Dist: linkml-runtime (>=1.7.4)
35
40
  Requires-Dist: openpyxl
36
41
  Requires-Dist: parse
37
42
  Requires-Dist: prefixcommons (>=0.1.7)
38
- Requires-Dist: prefixmaps (>=0.1.3)
43
+ Requires-Dist: prefixmaps (>=0.2.2)
39
44
  Requires-Dist: pydantic (>=1.0.0,<3.0.0)
40
45
  Requires-Dist: pyjsg (>=0.11.6)
46
+ Requires-Dist: pyshacl (>=0.25.0,<0.26.0) ; extra == "shacl" or extra == "tests"
41
47
  Requires-Dist: pyshex (>=0.7.20)
42
48
  Requires-Dist: pyshexc (>=0.8.3)
43
49
  Requires-Dist: python-dateutil
@@ -45,7 +51,6 @@ Requires-Dist: pyyaml
45
51
  Requires-Dist: rdflib (>=6.0.0)
46
52
  Requires-Dist: requests (>=2.22)
47
53
  Requires-Dist: sqlalchemy (>=1.4.31)
48
- Requires-Dist: typing-extensions (>=4.5.0,<5.0.0) ; python_version == "3.7"
49
54
  Requires-Dist: watchdog (>=0.9.0)
50
55
  Project-URL: Documentation, https://linkml.io/linkml/
51
56
  Project-URL: Repository, https://github.com/linkml/linkml
@@ -2,21 +2,21 @@ linkml/__init__.py,sha256=jwtUdhwmquj-0fCR6VwPH5_RfSpuG94hLWdre_W_FD4,3327
2
2
  linkml/_version.py,sha256=udxv6OEqcE89DTVMYPtetXYg8IA8Sgc6yW26-6f8C3M,310
3
3
  linkml/generators/PythonGenNotes.md,sha256=wb9BPLLhF6378OKLbwSBAwmniLpwrcT5_bbfCHfLme8,51006
4
4
  linkml/generators/README.md,sha256=RMzT8EblC_GEdPy5WyfXHDBXlFI6k6mz3Cx2sdpcyWI,4438
5
- linkml/generators/__init__.py,sha256=0KxTxNpQBnq4JTsDtwXQ1RYsRdmxfkegVBJKupti4Jg,1438
5
+ linkml/generators/__init__.py,sha256=dQ2EUKy_MctEVEzbC3XzEJL5YmYwjYfsa44mG2zKn7g,1517
6
6
  linkml/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  linkml/generators/common/type_designators.py,sha256=lgVcIRJJ-yCvVGeP9U_gQZpm77UmJBQo9Bh3lGJITno,1956
8
8
  linkml/generators/csvgen.py,sha256=X0f4qKXahSDtkzM9Y47rwWqdseP1O6PTZ_WKiOqOrQI,2956
9
- linkml/generators/docgen/class.md.jinja2,sha256=_nQr8ge57ZkX3Hrh-cqPUm8Z7HCnJuuRCgYm0g21mS8,3381
9
+ linkml/generators/docgen/class.md.jinja2,sha256=bz5A46HOIPkUVbzPGorg64NNhr66zK0hCCekSfRPErY,3787
10
10
  linkml/generators/docgen/class_diagram.md.jinja2,sha256=lLU_0sQZBttOX5Wiup2oZwrxHuiQtbU9ZgLi66aJvOo,2538
11
11
  linkml/generators/docgen/common_metadata.md.jinja2,sha256=zy8Ua3gDtAAq8VA3e3O3ft9W7eJopVZaq5efP8LU_hU,1321
12
12
  linkml/generators/docgen/enum.md.jinja2,sha256=mXnUrRkleY2bOTEyAZ5c4pcUnqhs6BNa8a-4LVve-eo,1014
13
13
  linkml/generators/docgen/index.md.jinja2,sha256=wXUYTmayPLFltC0vbGE_Mf6m3GkkWav7FOEjCvEpHp4,1466
14
14
  linkml/generators/docgen/index.tex.jinja2,sha256=Go_EA-_N4JUpbOYbk3OY11mz5yV70VF2l2sMtgIPWw4,501
15
15
  linkml/generators/docgen/schema.md.jinja2,sha256=xlENfnzNRYgPT_0tdqNFxgklVM4Qf5BuzhFVvSMDuxs,70
16
- linkml/generators/docgen/slot.md.jinja2,sha256=XVd0M4gKx9Q2fONcsUGBRj_bJivyN4P9jhj9IO496jQ,2817
16
+ linkml/generators/docgen/slot.md.jinja2,sha256=ZGa-kaNvi5LknvFRIjKQyRpSynr1SlkLrpEmWDNPwDA,3226
17
17
  linkml/generators/docgen/subset.md.jinja2,sha256=fTNIpAkml5RKFbbtLore3IAzFN1cISVsyL1ru2-Z4oA,2665
18
18
  linkml/generators/docgen/type.md.jinja2,sha256=QmCMJZrFwP33eHkggBVtypbyrxTb-XZn9vHOYojVaYk,635
19
- linkml/generators/docgen.py,sha256=Gce1B1ca3v-sXoUGOXNDc7YbKc-9wAz5bxDgfEQakC0,33567
19
+ linkml/generators/docgen.py,sha256=dz7OWxclX306EweVIgC765h3NKtJTRg0TPnqmltWygs,34347
20
20
  linkml/generators/dotgen.py,sha256=kzp1EYtF8bBqOuycJokDmsvHVDVkkW-J-6-MiUhwJH0,5013
21
21
  linkml/generators/erdiagramgen.py,sha256=xCnxIldDYZ7xnQ-vLaXlH3FH8MH3cxu-E0j8it-lyJE,10153
22
22
  linkml/generators/excelgen.py,sha256=3ILAeIHeYngNpPf3Ad7CXoHOLQ9KSiYcX5HdwHhQeQE,7696
@@ -26,34 +26,51 @@ 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=RQFBgNjWMdnjf0j8S_k1lyMauI9Ia5Ao0ruuFjLwhdA,7886
30
- linkml/generators/jsonldgen.py,sha256=BtPXLYbnXTXorUcoe6y4DL0xa-TPjHOvtXdhv-ppW3I,7656
29
+ linkml/generators/jsonldcontextgen.py,sha256=N_XWCx_1eS5KcWlzlyl79C-dW0gfe32v886UskD1iTU,8644
30
+ linkml/generators/jsonldgen.py,sha256=pk8Gmh2gSvXt_o7MTuJ71thNfIJuHUGkNl3yl3RIdsE,7728
31
31
  linkml/generators/jsonschemagen.py,sha256=XOsYIrpA6BwtAcfh8GNGduIjpuPAsF2f_PQ1mghj_WU,27455
32
32
  linkml/generators/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  linkml/generators/linkmlgen.py,sha256=1_Kt_7rD42WvCTjq0yaq1Of7jEDZR_uusyzAT-qWMHk,3471
34
34
  linkml/generators/markdowngen.py,sha256=dDMyusNXLvM2raIW-_vd2AQBhDHn0P_rMeDq3QFuacs,32926
35
35
  linkml/generators/namespacegen.py,sha256=vVcIyM0zlKd7XRvtdzwTwHjG4Pg49801gy4FUmjJlqQ,6450
36
36
  linkml/generators/oocodegen.py,sha256=r73QI08ajbTZTobc9OIG6BMWZft3zdu76vKVR33pyYg,7774
37
- linkml/generators/owlgen.py,sha256=pxSvi1xpwgYWj6NtNxpVb1JsG4VgS_zTHl2LH8q0gLs,53807
37
+ linkml/generators/owlgen.py,sha256=NqEvuJOUh4ZEe5tVeVol3SHy7zpCagEhso7Q1GLyIqY,54458
38
38
  linkml/generators/plantumlgen.py,sha256=tk-_XJtBA5EqYJSUTc3bdMdCwqlC-rc9VYO9A2V_HpM,14895
39
- linkml/generators/prefixmapgen.py,sha256=-IGKre3rRxCdNs0BP3Oo7Wzv8edeUQXkjjwN7od3qjU,4627
40
- linkml/generators/projectgen.py,sha256=WUEEWE0kMFPPDAYOa-KUvAiFqRADlBIcfoId5bO7new,9598
39
+ linkml/generators/prefixmapgen.py,sha256=L9TccwKNHEguW0ox5qgf_GhIuqauYTI8d4jSjeqdkWo,4720
40
+ linkml/generators/projectgen.py,sha256=OuT_AneoZFNMCn50GllfZafadUHt50u61JcftM2eed4,9750
41
41
  linkml/generators/protogen.py,sha256=5UxThsFDVyDTzzTDh77Z0anx4-tLgz8kQQ-e7ywIqwI,2290
42
- linkml/generators/pydanticgen.py,sha256=ijSLhWJxi-4PlJXvro09xDub3K_-zE1T5T_ywWnU3KA,30563
43
- linkml/generators/pythongen.py,sha256=WYWim9Um_a4xDohyrQSMthBVlbWlq9j2tbdUqnQmy6g,52465
42
+ linkml/generators/pydanticgen/__init__.py,sha256=uKGaaQSaeKqinHImXGFE448i-t8Oi0No8suIO76sep8,629
43
+ linkml/generators/pydanticgen/array.py,sha256=imbHtwgQcz_uloFWDBDojIMydZw9eysQyQl6ppT5eL8,19045
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=psEdNy_oJqHnTBZkQp4H8pNrFXv_y92j5oEoFcp_AEU,29809
47
+ linkml/generators/pydanticgen/template.py,sha256=7I-qch_vr1elXwJ1kxRcZEl3j6-WTLYRh8_b2DjxjyE,19911
48
+ linkml/generators/pydanticgen/templates/attribute.py.jinja,sha256=AlH_QFJJkONpzXQRGqnW4ufmjp9s9E7Q9W5r8ykNGeQ,443
49
+ linkml/generators/pydanticgen/templates/base_model.py.jinja,sha256=48y64MnC9rjNSV-nKLMeDuHN4gm15UsInhnKxh65zoM,834
50
+ linkml/generators/pydanticgen/templates/class.py.jinja,sha256=RIdkqdZS9rDILUuVqDIAWK_vATGkirLbPhdHSyHDAbY,565
51
+ linkml/generators/pydanticgen/templates/conditional_import.py.jinja,sha256=YheknDrxvepiJUzeItSL5aSbAkCdR1k0a6m6aTA4qNM,240
52
+ linkml/generators/pydanticgen/templates/enum.py.jinja,sha256=572XFQyEMZfL-G_Cj68T-NI_mUnDoFOAVJOGIKu2Hb8,338
53
+ linkml/generators/pydanticgen/templates/footer.py.jinja,sha256=WuWGJjkWDQcEPL2bGk5fdGuhO0gQRUJzpo4CQHHxQNQ,385
54
+ linkml/generators/pydanticgen/templates/imports.py.jinja,sha256=d1XFna2eOpkH8cgJML3vXwqGcocczvOcrbg6jjd4kP0,945
55
+ linkml/generators/pydanticgen/templates/module.py.jinja,sha256=SkmtWtQS7D-xBiZI-sFiYC3WYPKi3VJCj_KtaMVxexM,438
56
+ linkml/generators/pydanticgen/templates/validator.py.jinja,sha256=Yo4dubQal-HwEoJKztQkLYM5qCz1I8na2oaDlXuEpwU,532
57
+ linkml/generators/pythongen.py,sha256=AvOQZJ-OT8lMYeaT2bdexHuRPRfTK7wpbmgAdfc2lW4,52805
44
58
  linkml/generators/rdfgen.py,sha256=L6F08iDUqVemXXrRbJmcOxvJTt14hR0oo8WLoqf4npw,2656
45
- linkml/generators/shaclgen.py,sha256=jxQjQ-iT2SYpLso3aIyBtqaVVPvZflrVzWaNA7nxQa0,8686
46
- linkml/generators/shexgen.py,sha256=VVlSrGCighLf0YSStK_VeMnCK0imAL4BJNDRVTpUFkw,9859
59
+ linkml/generators/shacl/__init__.py,sha256=O-M-wndKw8rMW-U8X3QCNHal-ErXP6uXZqxiQSa77l4,108
60
+ linkml/generators/shacl/ifabsent_processor.py,sha256=kV9BGA2ZPXLRfaFuW0o4jpkATvGggvrqpAo9c1UqWNE,2193
61
+ linkml/generators/shacl/shacl_data_type.py,sha256=BT3C9tdFyBQnuucPN7YQiFAKEa9yuzy-Q26X6dmOXgo,1827
62
+ linkml/generators/shaclgen.py,sha256=vCNAX15wg0h86ZplRjo721_58UHUSVHkQULTYV_1HZI,8324
63
+ linkml/generators/shexgen.py,sha256=KzhaL-A4R4peSdhY6nlDWmS-DPfnZMxMzrXhHGnA_Ag,9874
47
64
  linkml/generators/sparqlgen.py,sha256=c7x8GFChKWprBx4rToSnu9qN8OleWTCenVUdZ8XSTWM,6138
48
65
  linkml/generators/sqlalchemy/__init__.py,sha256=mb9AC1rIFkSiNZhhG0TAk45ol9PjS1XvsrvCjgfVUpQ,249
49
66
  linkml/generators/sqlalchemy/sqlalchemy_declarative_template.py,sha256=X_Ws1NUBikMI5HuNgEhl_PIeWM-B-c2B0W9KUBH4QTg,2542
50
67
  linkml/generators/sqlalchemy/sqlalchemy_imperative_template.py,sha256=u4ZpponG1h6XROrOHGOf_0H2e6xL1_s8twAOA-gx94A,1622
51
- linkml/generators/sqlalchemygen.py,sha256=hQxKsTKa4jnIF05ac6EcxX1bMD17fvdckAD3GtN1aAI,9235
52
- linkml/generators/sqltablegen.py,sha256=qHhyh08d-1d6lIiXcLmNmu8FjY3ryVigPE0BgRcfhk8,11569
68
+ linkml/generators/sqlalchemygen.py,sha256=TTc1oLLwG0c1BdvDXvSfGWAJCDlVvq7Y0r0yjXcdiW4,9268
69
+ linkml/generators/sqltablegen.py,sha256=XorqF6lfZX6tHfi6O2aIjd2GU_JZx5BuERuC3P6utVE,11626
53
70
  linkml/generators/sssomgen.py,sha256=yur3q7so9uwIELWZaZRzkJwNbz_ppBL7IQki9XLIM3k,6879
54
71
  linkml/generators/string_template.md,sha256=kRcfic6entgIaJdpSg6GF3jcjC9wbKsCVM6wVT2qipc,1788
55
72
  linkml/generators/summarygen.py,sha256=crH_Hegd4Z7G7byUtgyXoP2XtG_4iblzZsu_pE4aQrk,2887
56
- linkml/generators/terminusdbgen.py,sha256=_po9KnOz6Uoctb9Y4fJuU_voW4uA5pepvZTmHLQ2_DE,4470
73
+ linkml/generators/terminusdbgen.py,sha256=XX651NgGGoCafA45XomRU0_DhbCyNzFNiigbjcrwXFQ,4627
57
74
  linkml/generators/typescriptgen.py,sha256=80Ph4RfzDoA1TRCkKaLWlh0NsCNvhakJ2RrNfMqcMmY,8577
58
75
  linkml/generators/yamlgen.py,sha256=PKssrY5VHpdbOU54PVwLVLbsRqHwoOgOImlMb6DVcXM,1614
59
76
  linkml/generators/yumlgen.py,sha256=lnHcLY0VwlU_i8QporSmwR62CXSV4aOCXKxRDw5AxUk,12196
@@ -61,7 +78,7 @@ linkml/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
78
  linkml/linter/cli.py,sha256=BpQiETcRfQlZsI1-JALyU9wXPgPOm_KE_n11p0iJaC8,4494
62
79
  linkml/linter/config/datamodel/.linkmllint.yaml,sha256=40rNhcL35FXQSjlVBMWnyPgplwEUqFT_sJmeZqUzxMw,292
63
80
  linkml/linter/config/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- linkml/linter/config/datamodel/config.py,sha256=4HtqHF2ZiYx0Izm50eUQRvygsm1xSnkc49w0nd9zbGk,16837
81
+ linkml/linter/config/datamodel/config.py,sha256=WyIBA1damYcW0JI6zLxbFwcHOtSdw0prSADlJdz3zG0,17202
65
82
  linkml/linter/config/datamodel/config.yaml,sha256=hh4a8RoHEsEpl-_E50SZjJD8kmHGquBdcrI4ZqNdAME,6980
66
83
  linkml/linter/config/default.yaml,sha256=O3kaiwyvEO3siX2jDzuBjsCQc1b_EMe466OfRz8Gc5Q,540
67
84
  linkml/linter/config/recommended.yaml,sha256=hxrRSlCZzFXr3WndWAxs2RKwuSwQxRjrvRQi-zteiYQ,198
@@ -72,7 +89,7 @@ linkml/linter/formatters/markdown_formatter.py,sha256=sumF2MNJYL5oipLwCftCr3AiaC
72
89
  linkml/linter/formatters/terminal_formatter.py,sha256=xmNwlRieVCssRt3fpnNP5WWw_YXGmaBsbxFoMWufy5M,2085
73
90
  linkml/linter/formatters/tsv_formatter.py,sha256=1VW-1Tv16mwhIDpHdExYpJJR3z42K5_XK2C-4mmYYdE,871
74
91
  linkml/linter/linter.py,sha256=qfVV-vFT7bUJ2BmmDQteD7Jz8HZ-CNDSvnkyhJ-54H0,5113
75
- linkml/linter/rules.py,sha256=Bk87FMKgdF_aSBqeLe1uQartcTxV3-ZwUu-QRp2iK4s,11164
92
+ linkml/linter/rules.py,sha256=EuZTHtrU9YndAf2vw6QknGZSVFgsbydStsQmrUCwTKk,11502
76
93
  linkml/reporting/__init__.py,sha256=Jo0V_nyEcnWhMukMW-bqW9dlbgCfaRlWm3CO-XzgU84,92
77
94
  linkml/reporting/model.py,sha256=-10yNfk8wuRC48ZI-akrWvtlJ9a6RYWET2TzlZV3XXo,8622
78
95
  linkml/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -86,17 +103,17 @@ linkml/utils/converter.py,sha256=snAF-pgZBSi4ANiaKXxqtZk5w3qonJjTfI4X5OVLmUE,628
86
103
  linkml/utils/datautils.py,sha256=QlbzwXykh5Fphfe5KxPo6_ekXfniLbHiEGJtLWjUrvY,3742
87
104
  linkml/utils/datavalidator.py,sha256=kBdWaVi8IZT1bOwEJgJYx-wZAb_PTBObB9nHpYORfKA,472
88
105
  linkml/utils/execute_tutorial.py,sha256=T4kHTSyz3ItJGEUZxVjR-3yLVKnOr5Ix4NMGE47-IuE,6912
89
- linkml/utils/generator.py,sha256=y5kZP-rQ-du_f87UsDS12mvjVbfwD0nzxg2xus8Aeiw,38231
106
+ linkml/utils/generator.py,sha256=3q_PpZQxBTwpoN8lHHMkUhHm1gg0qXhiHgLWV9FIVLM,38363
90
107
  linkml/utils/helpers.py,sha256=yR8n4zFA5wPcYC7xzRuNF3wO16vG80v6j7DM3qTNmIc,447
91
- linkml/utils/ifabsent_functions.py,sha256=C2mllfh7aIZgVqqJjN5nydurVUk0hV62Wy7uVMYfPDg,5801
108
+ linkml/utils/ifabsent_functions.py,sha256=IkcBcmRYu8sllx7_mTCqu4aHfTxX2AnQoccZ1KOODds,5843
92
109
  linkml/utils/logictools.py,sha256=GSmBiobC49TcQjE08RtXEE3JwJEOV7eEREio25uJiFs,21184
93
110
  linkml/utils/mergeutils.py,sha256=QVm2iQB4v_L2rSvPBsPe9C865R03BgV3TzlPoTTTwWQ,9044
94
111
  linkml/utils/rawloader.py,sha256=QB7Rdvy4o4ZJEWBWa2_2xzz2TOh_6Oe4slvUn8IBVIc,4329
95
112
  linkml/utils/schema_builder.py,sha256=4qhrur8O0xRZnPm7H1h2BZmTkut5R4q-IE_1KKiHy_c,9937
96
113
  linkml/utils/schema_fixer.py,sha256=Uz8M3AOQ_BputJr1f6lbfk1iyvmANUNG80-0B3BQKJ8,16761
97
- linkml/utils/schemaloader.py,sha256=bBSTqimMDTFH2FcKtRz99dKNJzV_myPsZSkIFp_6-A0,46421
114
+ linkml/utils/schemaloader.py,sha256=XkH3ARPVcJ3ggnk4qgHJBPepyII4UlSRHzBlTWZbpCo,46062
98
115
  linkml/utils/schemasynopsis.py,sha256=jKf5ZJxpNgSZ5x9oAcdGO3m1IwzcIU2Ni1ugm0SQq1g,18447
99
- linkml/utils/sqlutils.py,sha256=FPUA6Smn3FogE97TZZZtGNhaMK9kpC-qJ5Ylo1mg9l8,16618
116
+ linkml/utils/sqlutils.py,sha256=FsOC3Wut6qzzmsnIt9ROsiDt2wXOa1IZUUtJ_T4Nb6M,17071
100
117
  linkml/utils/typereferences.py,sha256=8Yfuz9-HAwOPoJLbIcO_sY9zf32hvPRzGeSOzECfMWA,2232
101
118
  linkml/utils/validation.py,sha256=eLw1-d8x3N1V14bSc6H_mJJXo59ryKvvUIBcOJ1dVMw,1438
102
119
  linkml/validator/__init__.py,sha256=djKc1IyxGKvVYaX5jSxsqjfcEYaw3rFgKbFJxI2wDNk,5002
@@ -124,8 +141,8 @@ linkml/workspaces/datamodel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
124
141
  linkml/workspaces/datamodel/workspaces.py,sha256=4HdkqweGNfMPqnB1_Onc9DcTfkhoagTRcqruh08nRoI,14905
125
142
  linkml/workspaces/datamodel/workspaces.yaml,sha256=EjVrwPpeRZqJRjuGyyDRxxFzuv55SiLIXPBRUG6HStU,4233
126
143
  linkml/workspaces/example_runner.py,sha256=OmC_yZLIb4KXGQrstBVZL0UAQ9ZAaraguQF0RSf-snk,11611
127
- linkml-1.7.5.dist-info/METADATA,sha256=Z5-5peEKgmQcQkWSTw2XnRS5zxdQ80B-S3sM_VCg1QY,3463
128
- linkml-1.7.5.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
129
- linkml-1.7.5.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
130
- linkml-1.7.5.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
131
- linkml-1.7.5.dist-info/RECORD,,
144
+ linkml-1.7.7.dist-info/entry_points.txt,sha256=7haDkIbyC7ZLhm5z-e3BhrLJpY2xoW1yuD8Y7QPNtVg,2093
145
+ linkml-1.7.7.dist-info/METADATA,sha256=f74yR9Byjm8tw_y28edi2dJtVwthbMwMUocjhXiy0TQ,3656
146
+ linkml-1.7.7.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
147
+ linkml-1.7.7.dist-info/LICENSE,sha256=kORMoywK6j9_iy0UvLR-a80P1Rvc9AOM4gsKlUNZABg,535
148
+ linkml-1.7.7.dist-info/RECORD,,
File without changes