"""Core data classes for the app registry."""
import json
from dataclasses import dataclass, fields
import jsonschema
import pkg_resources
from .util import load_json
[docs]@dataclass
class AppRegistrySchemas:
"""The app registry JSON-schema objects."""
app: dict
apps: dict
apps_index: dict
categories: dict
environment: dict
metadata: dict
[docs] @classmethod
def from_path(cls, path):
return cls(
**{
field.name: load_json(path.joinpath(f"{field.name}.schema.json"))
for field in fields(cls)
}
)
[docs] @classmethod
def from_package(cls):
return cls(
**{
field.name: json.loads(
pkg_resources.resource_string(
"aiidalab.registry", f"schemas/{field.name}.schema.json"
)
)
for field in fields(cls)
}
)
[docs]@dataclass
class AppRegistryData:
"""The app registry data objects (apps and categories)."""
apps: dict
categories: dict
[docs] def validate(self, schemas: AppRegistrySchemas):
"""Validate the registry data against the provided registry schemas."""
jsonschema.validate(instance=self.apps, schema=schemas.apps)
jsonschema.validate(instance=self.categories, schema=schemas.categories)