Source code for gnomish_army_knife.schemas

"""
A module for working with schemas belonging to this package.
"""

# built-in
from typing import Iterator
from typing import Optional as _Optional

# third-party
from vcorelib.dict.codec import BasicDictCodec as _BasicDictCodec
from vcorelib.dict.codec import DictCodec as _DictCodec
from vcorelib.io import DEFAULT_INCLUDES_KEY
from vcorelib.io.markdown import MarkdownMixin
from vcorelib.io.types import JsonObject as _JsonObject
from vcorelib.paths.find import PACKAGE_SEARCH
from vcorelib.schemas.base import SchemaMap as _SchemaMap
from vcorelib.schemas.json import JsonSchemaMap as _JsonSchemaMap

# internal
from gnomish_army_knife import PKG_SLUG

# Add this package to the search path.
if PKG_SLUG not in PACKAGE_SEARCH:
    PACKAGE_SEARCH.insert(0, PKG_SLUG)


[docs] class GakDictCodec(_DictCodec, MarkdownMixin): """ A simple wrapper for package classes that want to implement DictCodec. """ default_schemas: _Optional[_SchemaMap] = _JsonSchemaMap.from_package( PKG_SLUG, includes_key=DEFAULT_INCLUDES_KEY )
[docs] class BasicGakCodec(GakDictCodec, _BasicDictCodec): """A base class for schema-backed objects."""
[docs] def init(self, data: _JsonObject) -> None: """Perform implementation-specific initialization.""" super().init(data) self.set_markdown(config=data)
[docs] @staticmethod def to_slug(data: str) -> str: """Convert a string to a slug.""" return data.replace(" ", "_").replace("-", "_").lower()
@property def markdown_footer(self) -> Iterator[str]: """A simple footer.""" yield "---" yield "" yield "Data structure information below." yield "" yield self.markdown