diff --git a/linkml_runtime/__init__.py b/linkml_runtime/__init__.py index 3062326e..380d323b 100644 --- a/linkml_runtime/__init__.py +++ b/linkml_runtime/__init__.py @@ -1,5 +1,5 @@ from pathlib import Path -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from linkml_runtime.utils.schemaview import SchemaView from rdflib import RDF, RDFS, SKOS, XSD, OWL diff --git a/linkml_runtime/linkml_model/annotations.py b/linkml_runtime/linkml_model/annotations.py index 2516c7c3..a31a2c64 100644 --- a/linkml_runtime/linkml_model/annotations.py +++ b/linkml_runtime/linkml_model/annotations.py @@ -9,11 +9,11 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from .extensions import AnyValue, Extension, ExtensionTag metamodel_version = "1.7.0" diff --git a/linkml_runtime/linkml_model/datasets.py b/linkml_runtime/linkml_model/datasets.py index 5873b31f..647fda55 100644 --- a/linkml_runtime/linkml_model/datasets.py +++ b/linkml_runtime/linkml_model/datasets.py @@ -9,13 +9,13 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URI, URIorCURIE, XSDDateTime +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URI, URIorCURIE, XSDDateTime metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/linkml_model/extensions.py b/linkml_runtime/linkml_model/extensions.py index b7870953..54c4d112 100644 --- a/linkml_runtime/linkml_model/extensions.py +++ b/linkml_runtime/linkml_model/extensions.py @@ -9,12 +9,12 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" version = "2.0.0" diff --git a/linkml_runtime/linkml_model/mappings.py b/linkml_runtime/linkml_model/mappings.py index 39f14117..f4a967a4 100644 --- a/linkml_runtime/linkml_model/mappings.py +++ b/linkml_runtime/linkml_model/mappings.py @@ -8,9 +8,9 @@ from typing import Optional, Union -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" version = "2.0.0" diff --git a/linkml_runtime/linkml_model/meta.py b/linkml_runtime/linkml_model/meta.py index 8af4f410..3a8b22d2 100644 --- a/linkml_runtime/linkml_model/meta.py +++ b/linkml_runtime/linkml_model/meta.py @@ -34,17 +34,17 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from linkml_runtime.utils.formatutils import sfx -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from .annotations import Annotation, AnnotationTag from .extensions import Extension, ExtensionTag from .units import UnitOfMeasure -from linkml_runtime.utils.metamodelcore import Bool, NCName, URI, URIorCURIE, XSDDateTime +from linkml_runtime.types.metamodelcore import Bool, NCName, URI, URIorCURIE, XSDDateTime metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/linkml_model/types.py b/linkml_runtime/linkml_model/types.py index f35140bf..d0b9f248 100644 --- a/linkml_runtime/linkml_model/types.py +++ b/linkml_runtime/linkml_model/types.py @@ -7,8 +7,8 @@ # license: https://creativecommons.org/publicdomain/zero/1.0/ -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import Bool, Curie, Decimal, ElementIdentifier, NCName, NodeIdentifier, URI, URIorCURIE, XSDDate, XSDDateTime, XSDTime +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import Bool, Curie, Decimal, ElementIdentifier, NCName, NodeIdentifier, URI, URIorCURIE, XSDDate, XSDDateTime, XSDTime metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/linkml_model/units.py b/linkml_runtime/linkml_model/units.py index 0083d3a7..7eebcc9e 100644 --- a/linkml_runtime/linkml_model/units.py +++ b/linkml_runtime/linkml_model/units.py @@ -9,12 +9,12 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/linkml_model/validation.py b/linkml_runtime/linkml_model/validation.py index 6c4a7615..2739c528 100644 --- a/linkml_runtime/linkml_model/validation.py +++ b/linkml_runtime/linkml_model/validation.py @@ -10,13 +10,13 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list from linkml_runtime.utils.yamlutils import YAMLRoot -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import NodeIdentifier +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import NodeIdentifier metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/processing/referencevalidator.py b/linkml_runtime/processing/referencevalidator.py index f88b6191..2a2b8ffc 100644 --- a/linkml_runtime/processing/referencevalidator.py +++ b/linkml_runtime/processing/referencevalidator.py @@ -42,7 +42,7 @@ ) from linkml_runtime.utils import yamlutils from linkml_runtime.utils.eval_utils import eval_expr -from linkml_runtime.utils.metamodelcore import ( +from linkml_runtime.types.metamodelcore import ( XSDTime, Bool, XSDDate, diff --git a/linkml_runtime/processing/validation_datamodel.py b/linkml_runtime/processing/validation_datamodel.py index a6d83876..27b7aab0 100644 --- a/linkml_runtime/processing/validation_datamodel.py +++ b/linkml_runtime/processing/validation_datamodel.py @@ -14,15 +14,15 @@ PermissibleValue, ) -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import ( YAMLRoot, ) -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import Bool, URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import Bool, URIorCURIE metamodel_version = "1.7.0" version = None diff --git a/linkml_runtime/utils/curienamespace.py b/linkml_runtime/types/curienamespace.py similarity index 100% rename from linkml_runtime/utils/curienamespace.py rename to linkml_runtime/types/curienamespace.py diff --git a/linkml_runtime/utils/enumerations.py b/linkml_runtime/types/enum.py similarity index 98% rename from linkml_runtime/utils/enumerations.py rename to linkml_runtime/types/enum.py index 6b9cd047..c40a20de 100644 --- a/linkml_runtime/utils/enumerations.py +++ b/linkml_runtime/types/enum.py @@ -1,7 +1,7 @@ from dataclasses import fields from typing import Union, Optional -from linkml_runtime.utils.metamodelcore import Curie +from linkml_runtime.types.metamodelcore import Curie from linkml_runtime.utils.yamlutils import YAMLRoot diff --git a/linkml_runtime/utils/metamodelcore.py b/linkml_runtime/types/metamodelcore.py similarity index 100% rename from linkml_runtime/utils/metamodelcore.py rename to linkml_runtime/types/metamodelcore.py diff --git a/linkml_runtime/utils/slot.py b/linkml_runtime/types/slot.py similarity index 100% rename from linkml_runtime/utils/slot.py rename to linkml_runtime/types/slot.py diff --git a/linkml_runtime/utils/curie_validator.py b/linkml_runtime/utils/curie_validator.py new file mode 100644 index 00000000..b443206f --- /dev/null +++ b/linkml_runtime/utils/curie_validator.py @@ -0,0 +1,210 @@ +import re + +""" +Regex for CURIEs + +These regex are directly derived from the collected ABNF in RFC3986 +(except for DIGIT, ALPHA and HEXDIG, defined by RFC2234). + +They should be processed with re.VERBOSE. +""" + + +### basics + +DIGIT = r"[0-9]" + +ALPHA = r"[A-Za-z]" + +HEXDIG = r"[0-9ABCDEF]" + +# pct-encoded = "%" HEXDIG HEXDIG +pct_encoded = r" %% %(HEXDIG)s %(HEXDIG)s" % locals() + +ucschar = "(?: \u00a0-\ud7ff | \uf900-\ufdcf | \ufdf0-\uffef | \u10000-\u1fffD | \u20000-\u2fffD | \u30000-\u3fffD | \u40000-\u4fffD | \u50000-\u5fffD | \u60000-\u6fffD | \u70000-\u7fffD | \u80000-\u8fffD | \u90000-\u9fffD | \ua0000-\uafffD | \ub0000-\ubfffD | \uc0000-\ucfffD | \ud0000-\udfffD | \ue1000-\uefff )" + +# iunreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" +iunreserved = r"(?: %(ALPHA)s | %(DIGIT)s | \- | \. | _ | ~ | %(ucschar)s )" % locals() + +# gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" +gen_delims = r"(?: : | / | \? | \# | \[ | \] | @ )" + +# sub-delims = "!" / "$" / "&" / "'" / "(" +sub_delims = r"(?: ! | \$ | & | ' | \( | \) | \* | \+ | , | ; | = )" + +# ipchar = iunreserved / pct-encoded / sub-delims / ":" / "@" +ipchar = r"(?: %(iunreserved)s | %(pct_encoded)s | %(sub_delims)s | : | @ )" % locals() + +# reserved = gen-delims / sub-delims +reserved = r"(?: %(gen_delims)s | %(sub_delims)s )" % locals() + +CombiningChar = "[\u0300-\u0345] | [\u0360-\u0361] | [\u0483-\u0486] | [\u0591-\u05a1] | [\u05a3-\u05b9] | [\u05bb-\u05bd] | \u05bf | [\u05c1-\u05c2] | \u05c4 | [\u064b-\u0652] | \u0670 | [\u06d6-\u06dc] | [\u06dd-\u06df] | [\u06e0-\u06e4] | [\u06e7-\u06e8] | [\u06ea-\u06ed] | [\u0901-\u0903] | \u093c | [\u093e-\u094c] | \u094d | [\u0951-\u0954] | [\u0962-\u0963] | [\u0981-\u0983] | \u09bc | \u09be | \u09bf | [\u09c0-\u09c4] | [\u09c7-\u09c8] | [\u09cb-\u09cd] | \u09d7 | [\u09e2-\u09e3] | \u0a02 | \u0a3c | \u0a3e | \u0a3f | [\u0a40-\u0a42] | [\u0a47-\u0a48] | [\u0a4b-\u0a4d] | [\u0a70-\u0a71] | [\u0a81-\u0a83] | \u0abc | [\u0abe-\u0ac5] | [\u0ac7-\u0ac9] | [\u0acb-\u0acd] | [\u0b01-\u0b03] | \u0b3c | [\u0b3e-\u0b43] | [\u0b47-\u0b48] | [\u0b4b-\u0b4d] | [\u0b56-\u0b57] | [\u0b82-\u0b83] | [\u0bbe-\u0bc2] | [\u0bc6-\u0bc8] | [\u0bca-\u0bcd] | \u0bd7 | [\u0c01-\u0c03] | [\u0c3e-\u0c44] | [\u0c46-\u0c48] | [\u0c4a-\u0c4d] | [\u0c55-\u0c56] | [\u0c82-\u0c83] | [\u0cbe-\u0cc4] | [\u0cc6-\u0cc8] | [\u0cca-\u0ccd] | [\u0cd5-\u0cd6] | [\u0d02-\u0d03] | [\u0d3e-\u0d43] | [\u0d46-\u0d48] | [\u0d4a-\u0d4d] | \u0d57 | \u0e31 | [\u0e34-\u0e3a] | [\u0e47-\u0e4e] | \u0eb1 | [\u0eb4-\u0eb9] | [\u0ebb-\u0ebc] | [\u0ec8-\u0ecd] | [\u0f18-\u0f19] | \u0f35 | \u0f37 | \u0f39 | \u0f3e | \u0f3f | [\u0f71-\u0f84] | [\u0f86-\u0f8b] | [\u0f90-\u0f95] | \u0f97 | [\u0f99-\u0fad] | [\u0fb1-\u0fb7] | \u0fb9 | [\u20d0-\u20dc] | \u20e1 | [\u302a-\u302f] | \u3099 | \u309a" + +Extender = "\u00b7 | \u02d0 | \u02d1 | \u0387 | \u0640 | \u0e46 | \u0ec6 | \u3005 | [\u3031-\u3035] | [\u309d-\u309e] | [\u30fc-\u30fe]" + +NCNameChar = r"(?: %(ALPHA)s | %(DIGIT)s | \. | \- | _ | %(CombiningChar)s | %(Extender)s )" % locals() + +prefix = r"(?: %(ALPHA)s | _ ) (?: %(NCNameChar)s )*" % locals() + +### iauthority + +# dec-octet = DIGIT ; 0-9 +# / %x31-39 DIGIT ; 10-99 +# / "1" 2DIGIT ; 100-199 +# / "2" %x30-34 DIGIT ; 200-249 +# / "25" %x30-35 ; 250-255 +dec_octet = ( + r"""(?: %(DIGIT)s | + [1-9] %(DIGIT)s | + 1 %(DIGIT)s{2} | + 2 [0-4] %(DIGIT)s | + 25 [0-5] + ) +""" + % locals() +) + +# IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet +IPv4address = r"%(dec_octet)s \. %(dec_octet)s \. %(dec_octet)s \. %(dec_octet)s" % locals() + +# h16 = 1*4HEXDIG +h16 = r"(?: %(HEXDIG)s ){1,4}" % locals() + +# ls32 = ( h16 ":" h16 ) / IPv4address +ls32 = r"(?: (?: %(h16)s : %(h16)s ) | %(IPv4address)s )" % locals() + +# IPv6address = 6( h16 ":" ) ls32 +# / "::" 5( h16 ":" ) ls32 +# / [ h16 ] "::" 4( h16 ":" ) ls32 +# / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 +# / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 +# / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 +# / [ *4( h16 ":" ) h16 ] "::" ls32 +# / [ *5( h16 ":" ) h16 ] "::" h16 +# / [ *6( h16 ":" ) h16 ] "::" +IPv6address = ( + r"""(?: (?: %(h16)s : ){6} %(ls32)s | + :: (?: %(h16)s : ){5} %(ls32)s | + %(h16)s :: (?: %(h16)s : ){4} %(ls32)s | + (?: %(h16)s : ) %(h16)s :: (?: %(h16)s : ){3} %(ls32)s | + (?: %(h16)s : ){2} %(h16)s :: (?: %(h16)s : ){2} %(ls32)s | + (?: %(h16)s : ){3} %(h16)s :: %(h16)s : %(ls32)s | + (?: %(h16)s : ){4} %(h16)s :: %(ls32)s | + (?: %(h16)s : ){5} %(h16)s :: %(h16)s | + (?: %(h16)s : ){6} %(h16)s :: + ) +""" + % locals() +) + +# IPvFuture = "v" 1*HEXDIG "." 1*( iunreserved / sub-delims / ":" ) +IPvFuture = r"v %(HEXDIG)s+ \. (?: %(iunreserved)s | %(sub_delims)s | : )+" % locals() + +# IP-literal = "[" ( IPv6address / IPvFuture ) "]" +IP_literal = r"\[ (?: %(IPv6address)s | %(IPvFuture)s ) \]" % locals() + +# ireg-name = *( iunreserved / pct-encoded / sub-delims ) +ireg_name = r"(?: %(iunreserved)s | %(pct_encoded)s | %(sub_delims)s )*" % locals() + +# iuserinfo = *( iunreserved / pct-encoded / sub-delims / ":" ) +iuserinfo = r"(?: %(iunreserved)s | %(pct_encoded)s | %(sub_delims)s | : )" % locals() + +# ihost = IP-literal / IPv4address / ireg-name +ihost = r"(?: %(IP_literal)s | %(IPv4address)s | %(ireg_name)s )" % locals() + +# iport = *DIGIT +iport = r"(?: %(DIGIT)s )*" % locals() + +# iauthority = [ iuserinfo "@" ] ihost [ ":" iport ] +iauthority = r"(?: %(iuserinfo)s @)? %(ihost)s (?: : %(iport)s)?" % locals() + + +### Path + +# isegment = *ipchar +isegment = r"%(ipchar)s*" % locals() + +# isegment-nz = 1*ipchar +isegment_nz = r"%(ipchar)s+" % locals() + +# isegment-nz-nc = 1*( iunreserved / pct-encoded / sub-delims / "@" ) +# ; non-zero-length segment without any colon ":" +isegment_nz_nc = r"(?: %(iunreserved)s | %(pct_encoded)s | %(sub_delims)s | @ )+" % locals() + +# ipath-abempty = *( "/" isegment ) +ipath_abempty = r"(?: / %(isegment)s )*" % locals() + +# path-absolute = "/" [ isegment-nz *( "/" isegment ) ] +ipath_absolute = r"/ (?: %(isegment_nz)s (?: / %(isegment)s )* )?" % locals() + +# ipath-noscheme = isegment-nz-nc *( "/" isegment ) +ipath_noscheme = r"%(isegment_nz_nc)s (?: / %(isegment)s )*" % locals() + +# ipath-rootless = isegment-nz *( "/" isegment ) +ipath_rootless = r"%(isegment_nz)s (?: / %(isegment)s )*" % locals() + +# path-empty = 0 +ipath_empty = r"" ### FIXME + +# path = path-abempty ; begins with "/" or is empty +# / path-absolute ; begins with "/" but not "//" +# / path-noscheme ; begins with a non-colon segment +# / path-rootless ; begins with a segment +# / path-empty ; zero characters +path = ( + r"""(?: %(ipath_abempty)s | + %(ipath_absolute)s | + %(ipath_noscheme)s | + %(ipath_rootless)s | + %(ipath_empty)s + ) +""" + % locals() +) + +iprivate = r"[\uE000-\uF8FF] | [\uF0000-\uFFFFD] | [\u100000-\u10FFFD]" + +### Query and Fragment + +# iquery = *( ipchar / "/" / "?" ) +iquery = r"(?: %(ipchar)s | %(iprivate)s | / | \? )*" % locals() + +# ifragment = *( ipchar / "/" / "?" ) +ifragment = r"(?: %(ipchar)s | / | \? )*" % locals() + + +### URIs + + +# irelative-part = "//" iauthority ipath-abempty +# / ipath-absolute +# / path-noscheme +# / path-empty +irelative_part = ( + r"""(?: (?: // %(iauthority)s %(ipath_abempty)s ) | + %(ipath_absolute)s | + %(ipath_noscheme)s | + %(ipath_empty)s + ) +""" + % locals() +) + +# irelative-ref = irelative-part [ "?" iquery ] [ "#" ifragment ] +irelative_ref = r"%(irelative_part)s (?: \? %(iquery)s)? (?: \# %(ifragment)s)?" % locals() + +CURIE = r"(?: (?: (?: %(prefix)s )? : )? %(irelative_ref)s )" % locals() +curie_validator = re.compile(f"^{CURIE}$", re.VERBOSE) + +# URI-reference = URI / relative-ref +safe_CURIE = r"(?: \[ %(CURIE)s \] )" % locals() +safe_curie_validator = re.compile(f"^{safe_CURIE}$", re.VERBOSE) + + +def validate_curie(input): + print(CURIE) + return curie_validator.match(input) + + +def validate_safe_curie(input): + return safe_curie_validator.match(input) diff --git a/linkml_runtime/utils/inference_utils.py b/linkml_runtime/utils/inference_utils.py index 6a0bd3b5..b9240cbf 100644 --- a/linkml_runtime/utils/inference_utils.py +++ b/linkml_runtime/utils/inference_utils.py @@ -6,7 +6,7 @@ from linkml_runtime.utils.schemaview import SchemaView from linkml_runtime.linkml_model import SlotDefinitionName, PermissibleValue, ClassDefinitionName -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from linkml_runtime.utils.eval_utils import eval_expr from linkml_runtime.utils.walker_utils import traverse_object_tree from linkml_runtime.utils.yamlutils import YAMLRoot diff --git a/linkml_runtime/utils/permissiblevalueimpl.py b/linkml_runtime/utils/permissiblevalueimpl.py new file mode 100644 index 00000000..ad68f3d1 --- /dev/null +++ b/linkml_runtime/utils/permissiblevalueimpl.py @@ -0,0 +1,144 @@ +from dataclasses import dataclass +from typing import Any, Optional, ClassVar, Union + +from rdflib import URIRef + +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE, empty_list, URI +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str +from types.enum import EnumDefinitionImpl + +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') + +RenderingURI = URI + +class PermissibleValueText(extended_str): + pass + +@dataclass +class PermissibleValue(YAMLRoot): + """ + a permissible value, accompanied by intended text and an optional mapping to a concept URI + """ + _inherited_slots: ClassVar[list[str]] = [] + + class_class_uri: ClassVar[URIRef] = LINKML.PermissibleValue + class_class_curie: ClassVar[str] = "linkml:PermissibleValue" + class_name: ClassVar[str] = "permissible_value" + class_model_uri: ClassVar[URIRef] = LINKML.PermissibleValue + + text: Union[str, PermissibleValueText] = None + description: Optional[str] = None + meaning: Optional[Union[str, URIorCURIE]] = None + deprecated: Optional[str] = None + todos: Optional[Union[str, list[str]]] = empty_list() + notes: Optional[Union[str, list[str]]] = empty_list() + comments: Optional[Union[str, list[str]]] = empty_list() + from_schema: Optional[Union[str, URI]] = None + imported_from: Optional[str] = None + see_also: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list() + deprecated_element_has_exact_replacement: Optional[Union[str, URIorCURIE]] = None + deprecated_element_has_possible_replacement: Optional[Union[str, URIorCURIE]] = None + is_a: Optional[Union[str, PermissibleValueText]] = None + mixins: Optional[Union[Union[str, PermissibleValueText], list[Union[str, PermissibleValueText]]]] = empty_list() + + def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + if self.text is None: + raise ValueError("text must be supplied") + if not isinstance(self.text, PermissibleValueText): + self.text = PermissibleValueText(self.text) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + if self.meaning is not None and not isinstance(self.meaning, URIorCURIE): + self.meaning = URIorCURIE(self.meaning) + + if self.deprecated is not None and not isinstance(self.deprecated, str): + self.deprecated = str(self.deprecated) + + if self.todos is None: + self.todos = [] + if not isinstance(self.todos, list): + self.todos = [self.todos] + self.todos = [v if isinstance(v, str) else str(v) for v in self.todos] + + if self.notes is None: + self.notes = [] + if not isinstance(self.notes, list): + self.notes = [self.notes] + self.notes = [v if isinstance(v, str) else str(v) for v in self.notes] + + if self.comments is None: + self.comments = [] + if not isinstance(self.comments, list): + self.comments = [self.comments] + self.comments = [v if isinstance(v, str) else str(v) for v in self.comments] + + if self.from_schema is not None and not isinstance(self.from_schema, URI): + self.from_schema = URI(self.from_schema) + + if self.imported_from is not None and not isinstance(self.imported_from, str): + self.imported_from = str(self.imported_from) + + if self.see_also is None: + self.see_also = [] + if not isinstance(self.see_also, list): + self.see_also = [self.see_also] + self.see_also = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.see_also] + + if self.deprecated_element_has_exact_replacement is not None and not isinstance(self.deprecated_element_has_exact_replacement, URIorCURIE): + self.deprecated_element_has_exact_replacement = URIorCURIE(self.deprecated_element_has_exact_replacement) + + if self.deprecated_element_has_possible_replacement is not None and not isinstance(self.deprecated_element_has_possible_replacement, URIorCURIE): + self.deprecated_element_has_possible_replacement = URIorCURIE(self.deprecated_element_has_possible_replacement) + + if self.is_a is not None and not isinstance(self.is_a, PermissibleValueText): + self.is_a = PermissibleValueText(self.is_a) + + if self.mixins is None: + self.mixins = [] + if not isinstance(self.mixins, list): + self.mixins = [self.mixins] + self.mixins = [v if isinstance(v, PermissibleValueText) else PermissibleValueText(v) for v in self.mixins] + + super().__post_init__(**kwargs) + + +# Enumerations +class PvFormulaOptions(EnumDefinitionImpl): + """ + The formula used to generate the set of permissible values from the code_set values + """ + CODE = PermissibleValue(text="CODE", + description="The permissible values are the set of possible codes in the code set") + CURIE = PermissibleValue(text="CURIE", + description="The permissible values are the set of CURIES in the code set") + URI = PermissibleValue(text="URI", + description="The permissible values are the set of code URIs in the code set") + FHIR_CODING = PermissibleValue(text="FHIR_CODING", + description="The permissible values are the set of FHIR coding elements derived from the code set") + + _defn = EnumDefinition( + name="PvFormulaOptions", + description="The formula used to generate the set of permissible values from the code_set values", + ) + +class PermissibleValueImpl(PermissibleValue): + """ + Permissible Value implementation + """ + def __init__(self, *args, defn: EnumDefinitionImpl, **kwargs) -> None: + """ Record the referencing definition to allow the entry to be fleshed out from a terminology service """ + super().__init__(*args, **kwargs) + self._defn = defn + + def __post_init__(self, **kwargs: dict[str, Any]) -> None: + """ Make sure that we are correctly situated in the containing definition """ + if self.text in self._defn: + if self._defn.permissible_values[self.text] != self: + raise TypeError(f"Permissible value for code: {self.text} is already assigned") + if self not in self._defn.permissible_values: + if not self._defn.code_set: + # Fixed set of values -- no terminology reference + raise TypeError("{self}: Permissible value not in definition set") diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 5356e54f..1dee7361 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -49,7 +49,7 @@ from collections.abc import Mapping from types import NotImplementedType - from linkml_runtime.utils.metamodelcore import URIorCURIE + from linkml_runtime.types.metamodelcore import URIorCURIE logger = logging.getLogger(__name__) diff --git a/linkml_runtime/utils/yamlutils.py b/linkml_runtime/utils/yamlutils.py index 8ca8b309..cb93f75a 100644 --- a/linkml_runtime/utils/yamlutils.py +++ b/linkml_runtime/utils/yamlutils.py @@ -65,7 +65,7 @@ def _default(self, obj, filtr: Callable[[dict], dict] = None): if not is_classvar and not k.startswith('_') and v is not None and\ (not isinstance(v, (dict, list, bool)) or v): - from linkml_runtime.utils.enumerations import EnumDefinitionImpl + from linkml_runtime.types.enum import EnumDefinitionImpl if isinstance(v, dict): itemslist = [] for vk, vv in v.items(): @@ -322,7 +322,7 @@ def root_representer(dumper: yaml.Dumper, data: YAMLRoot): """ # TODO: Figure out how to import EnumDefinition here # elif isinstance(v, EnumDefinition): - from linkml_runtime.utils.enumerations import EnumDefinitionImpl + from linkml_runtime.types.enum import EnumDefinitionImpl if isinstance(data, EnumDefinitionImpl): data = data.code rval = dict() diff --git a/tests/test_index/model/container_test.py b/tests/test_index/model/container_test.py index 84c2603c..e3a1f816 100644 --- a/tests/test_index/model/container_test.py +++ b/tests/test_index/model/container_test.py @@ -13,13 +13,13 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import Bool, XSDDate +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import Bool, XSDDate metamodel_version = "1.7.0" version = None diff --git a/tests/test_issues/input/issue_355.py b/tests/test_issues/input/issue_355.py index 991d356c..2814e5d6 100644 --- a/tests/test_issues/input/issue_355.py +++ b/tests/test_issues/input/issue_355.py @@ -10,12 +10,12 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" diff --git a/tests/test_issues/input/issue_368.py b/tests/test_issues/input/issue_368.py index 39b6d31b..c10c7443 100644 --- a/tests/test_issues/input/issue_368.py +++ b/tests/test_issues/input/issue_368.py @@ -10,9 +10,9 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot +from linkml_runtime.types.slot import Slot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from .issue_368_imports import ParentClass, SampleEnum metamodel_version = "1.7.0" diff --git a/tests/test_issues/input/issue_368_imports.py b/tests/test_issues/input/issue_368_imports.py index 823524c0..70493e5d 100644 --- a/tests/test_issues/input/issue_368_imports.py +++ b/tests/test_issues/input/issue_368_imports.py @@ -11,9 +11,9 @@ from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue from linkml_runtime.utils.yamlutils import YAMLRoot -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_issues/models/linkml_issue_576.py b/tests/test_issues/models/linkml_issue_576.py index 0b7bf1f9..cc4471ad 100644 --- a/tests/test_issues/models/linkml_issue_576.py +++ b/tests/test_issues/models/linkml_issue_576.py @@ -10,13 +10,13 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from linkml_runtime.linkml_model.types import String -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" version = None diff --git a/tests/test_issues/models/model_817.py b/tests/test_issues/models/model_817.py index 874a9162..fd262cb6 100644 --- a/tests/test_issues/models/model_817.py +++ b/tests/test_issues/models/model_817.py @@ -12,12 +12,12 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" version = None diff --git a/tests/test_issues/test_issue_1355.py b/tests/test_issues/test_issue_1355.py index 6175c72d..dd9152c5 100644 --- a/tests/test_issues/test_issue_1355.py +++ b/tests/test_issues/test_issue_1355.py @@ -4,7 +4,7 @@ @author: wf ''' from unittest import TestCase -from linkml_runtime.utils.metamodelcore import URI +from linkml_runtime.types.metamodelcore import URI class Issue1355TestCase(TestCase): """ diff --git a/tests/test_issues/test_issue_355.py b/tests/test_issues/test_issue_355.py index 4e44ad74..0dae0689 100644 --- a/tests/test_issues/test_issue_355.py +++ b/tests/test_issues/test_issue_355.py @@ -11,12 +11,12 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URIorCURIE metamodel_version = "1.7.0" diff --git a/tests/test_loaders_dumpers/models/books_normalized.py b/tests/test_loaders_dumpers/models/books_normalized.py index 5ef2eb8d..5165a884 100644 --- a/tests/test_loaders_dumpers/models/books_normalized.py +++ b/tests/test_loaders_dumpers/models/books_normalized.py @@ -12,12 +12,12 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_loaders_dumpers/models/enum_model.py b/tests/test_loaders_dumpers/models/enum_model.py index 29268796..89be940d 100644 --- a/tests/test_loaders_dumpers/models/enum_model.py +++ b/tests/test_loaders_dumpers/models/enum_model.py @@ -11,11 +11,11 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot +from linkml_runtime.types.slot import Slot from linkml_runtime.utils.yamlutils import YAMLRoot -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_loaders_dumpers/models/node_object.py b/tests/test_loaders_dumpers/models/node_object.py index 8fbfe102..365973c3 100644 --- a/tests/test_loaders_dumpers/models/node_object.py +++ b/tests/test_loaders_dumpers/models/node_object.py @@ -11,11 +11,11 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_loaders_dumpers/models/personinfo.py b/tests/test_loaders_dumpers/models/personinfo.py index 8b28bc49..cd30ec43 100644 --- a/tests/test_loaders_dumpers/models/personinfo.py +++ b/tests/test_loaders_dumpers/models/personinfo.py @@ -13,14 +13,14 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from linkml_runtime.linkml_model.types import Decimal, Uri, Uriorcurie -from linkml_runtime.utils.metamodelcore import Bool, Decimal, XSDDate +from linkml_runtime.types.metamodelcore import Bool, Decimal, XSDDate metamodel_version = "1.7.0" version = None diff --git a/tests/test_loaders_dumpers/models/personinfo_test_issue_429.py b/tests/test_loaders_dumpers/models/personinfo_test_issue_429.py index 4ec14d1c..6cdde30d 100644 --- a/tests/test_loaders_dumpers/models/personinfo_test_issue_429.py +++ b/tests/test_loaders_dumpers/models/personinfo_test_issue_429.py @@ -10,11 +10,11 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" version = None diff --git a/tests/test_loaders_dumpers/models/phenopackets.py b/tests/test_loaders_dumpers/models/phenopackets.py index 5ad33459..16c810d2 100644 --- a/tests/test_loaders_dumpers/models/phenopackets.py +++ b/tests/test_loaders_dumpers/models/phenopackets.py @@ -12,13 +12,13 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import Bool +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import Bool metamodel_version = "1.7.0" version = None diff --git a/tests/test_loaders_dumpers/models/termci_schema.py b/tests/test_loaders_dumpers/models/termci_schema.py index ed47afd5..47d2eb7e 100644 --- a/tests/test_loaders_dumpers/models/termci_schema.py +++ b/tests/test_loaders_dumpers/models/termci_schema.py @@ -10,11 +10,11 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.metamodelcore import empty_list, empty_dict +from linkml_runtime.types.metamodelcore import empty_list, empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.metamodelcore import URI, URIorCURIE +from linkml_runtime.types.curienamespace import CurieNamespace +from linkml_runtime.types.metamodelcore import URI, URIorCURIE metamodel_version = "1.7.0" diff --git a/tests/test_utils/input/inlined_as_dict.py b/tests/test_utils/input/inlined_as_dict.py index e4ecabe6..c4e391bd 100644 --- a/tests/test_utils/input/inlined_as_dict.py +++ b/tests/test_utils/input/inlined_as_dict.py @@ -10,10 +10,10 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_utils/input/inlined_as_list.py b/tests/test_utils/input/inlined_as_list.py index c50d2fe0..9e02dd82 100644 --- a/tests/test_utils/input/inlined_as_list.py +++ b/tests/test_utils/input/inlined_as_list.py @@ -10,10 +10,10 @@ from typing import Optional, Union, ClassVar, Any from dataclasses import dataclass -from linkml_runtime.utils.metamodelcore import empty_dict +from linkml_runtime.types.metamodelcore import empty_dict from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace metamodel_version = "1.7.0" diff --git a/tests/test_utils/model/inference_example.py b/tests/test_utils/model/inference_example.py index 76888dd9..bca81556 100644 --- a/tests/test_utils/model/inference_example.py +++ b/tests/test_utils/model/inference_example.py @@ -12,14 +12,14 @@ from dataclasses import dataclass from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue -from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.metamodelcore import empty_list +from linkml_runtime.types.slot import Slot +from linkml_runtime.types.metamodelcore import empty_list from linkml_runtime.utils.yamlutils import YAMLRoot -from linkml_runtime.utils.enumerations import EnumDefinitionImpl +from linkml_runtime.types.enum import EnumDefinitionImpl from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace from linkml_runtime.linkml_model.types import Decimal -from linkml_runtime.utils.metamodelcore import Bool, Decimal +from linkml_runtime.types.metamodelcore import Bool, Decimal metamodel_version = "1.7.0" diff --git a/tests/test_utils/test_curienamespace.py b/tests/test_utils/test_curienamespace.py index 3acec7ce..a4abb99c 100644 --- a/tests/test_utils/test_curienamespace.py +++ b/tests/test_utils/test_curienamespace.py @@ -2,7 +2,7 @@ from rdflib import URIRef -from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.types.curienamespace import CurieNamespace class CurieNamespaceTestCase(unittest.TestCase): diff --git a/tests/test_utils/test_metamodelcore.py b/tests/test_utils/test_metamodelcore.py index b4151ea1..3e35197d 100644 --- a/tests/test_utils/test_metamodelcore.py +++ b/tests/test_utils/test_metamodelcore.py @@ -5,7 +5,7 @@ from jsonasobj2 import as_json from rdflib import Literal, XSD, Graph, RDF, Namespace -from linkml_runtime.utils.metamodelcore import NCName, Bool, URIorCURIE, URI, XSDDate, XSDDateTime, XSDTime, Curie, \ +from linkml_runtime.types.metamodelcore import NCName, Bool, URIorCURIE, URI, XSDDate, XSDDateTime, XSDTime, Curie, \ NodeIdentifier from linkml_runtime.utils.namespaces import Namespaces from linkml_runtime.utils.strictness import lax, strict