Skip to content

Commit

Permalink
Move get_dandi_linkml_schema() into DandisetLinkmlValidator as a …
Browse files Browse the repository at this point in the history
…class method

This eliminates the use of a private global variable
keep the schema
  • Loading branch information
candleindark committed Oct 7, 2024
1 parent 42c196e commit 507b933
Showing 1 changed file with 16 additions and 18 deletions.
34 changes: 16 additions & 18 deletions src/dandisets_linkml_status_tools/cli/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,27 +39,10 @@
# The names of the collection of modules in which the DANDI models are defined
DANDI_MODULE_NAMES = ["dandischema.models"]

# The LinkML schema produced by the pydantic2linkml translator for DANDI models
_DANDI_LINKML_SCHEMA: Optional[SchemaDefinition] = None

# A callable that sorts a given iterable of strings in a case-insensitive manner
isorted = partial(sorted, key=str.casefold)


def get_dandi_linkml_schema() -> SchemaDefinition:
"""
Get the LinkML schema produced by the pydantic2linkml translator for DANDI models
:return: The LinkML schema
"""
global _DANDI_LINKML_SCHEMA

if _DANDI_LINKML_SCHEMA is None:
_DANDI_LINKML_SCHEMA = translate_defs(DANDI_MODULE_NAMES)

return _DANDI_LINKML_SCHEMA


def pydantic_validate(dandiset_metadata: dict[str, Any]) -> str:
"""
Validate the given dandiset metadata against the Pydantic dandiset metadata model
Expand All @@ -85,6 +68,9 @@ class DandisetLinkmlValidator:
expressed in Pydantic
"""

# The LinkML schema produced by the pydantic2linkml translator for DANDI models
_dandi_linkml_schema: Optional[SchemaDefinition] = None

def __init__(self, validation_plugins: Optional[list[ValidationPlugin]] = None):
"""
Initialize a `DandisetLinkmlValidator` instance that wraps a LinkML validator
Expand All @@ -99,10 +85,22 @@ def __init__(self, validation_plugins: Optional[list[ValidationPlugin]] = None):
validation_plugins = [JsonschemaValidationPlugin(closed=True)]

self._inner_validator = Validator(
get_dandi_linkml_schema(),
self.get_dandi_linkml_schema(),
validation_plugins=validation_plugins,
)

@classmethod
def get_dandi_linkml_schema(cls) -> SchemaDefinition:
"""
Get the LinkML schema produced by the pydantic2linkml translator for DANDI models
:return: The LinkML schema
"""
if cls._dandi_linkml_schema is None:
cls._dandi_linkml_schema = translate_defs(DANDI_MODULE_NAMES)

return cls._dandi_linkml_schema

def validate(self, dandiset_metadata: dict[str, Any]) -> list[ValidationResult]:
"""
Validate the given dandiset metadata against the dandiset metadata model in
Expand Down

0 comments on commit 507b933

Please sign in to comment.