Source code for yaslha.comment

"""Module of a class to handle comment interface."""

import logging
from typing import TYPE_CHECKING, Generic, List, TypeVar, Union

from typing_extensions import Literal

from yaslha._line import format_comment

if TYPE_CHECKING:
    from yaslha.block import GenericBlock
    from yaslha._line import DecayKeyType, KeyType, InfoKeyType  # noqa: F401

KTG = TypeVar("KTG", "KeyType", "InfoKeyType", "DecayKeyType")
CT = TypeVar("CT", str, List[str])
HEAD = Literal["head"]

logger = logging.getLogger(__name__)


[docs]class CommentInterface(Generic[KTG, CT]): """Accessor object to the comments in blocks.""" def __init__(self, block: "GenericBlock[KTG, CT]") -> None: self._block = block # type: GenericBlock[KTG, CT] self._pre = PreCommentInterface(block) # type: PreCommentInterface[KTG, CT] @property def pre(self) -> "PreCommentInterface[KTG, CT]": """Return pre-comment interface.""" return self._pre
[docs] def __getitem__(self, key: Union[KTG, HEAD]) -> Union[CT, str]: # noqa: F811 """Return comment.""" if key == "head": return self._block.head.comment else: return self._block._get_comment(key)
[docs] def __setitem__(self, key: Union[KTG, HEAD], value: Union[CT, str, None]) -> None: """Set comment.""" if key == "head": self._block.head.comment = value or "" else: self._block._set_comment(key, value)
[docs] def __call__(self, key: Union[KTG, HEAD], **kw: bool) -> Union[CT, str]: """Return comment in specified format.""" return format_comment(self.__getitem__(key), **kw)
[docs]class PreCommentInterface(Generic[KTG, CT]): """Accessor object to the pre-line comments in blocks.""" def __init__(self, block: "GenericBlock[KTG, CT]"): self._block = block # type: GenericBlock[KTG, CT]
[docs] def __getitem__(self, key: Union[KTG, HEAD]) -> List[str]: """Return pre-line comment.""" if key == "head": return self._block.head.pre_comment else: return self._block._get_pre_comment(key)
[docs] def __setitem__(self, key: Union[KTG, HEAD], value: Union[List[str], None]) -> None: """Set pre-line comment.""" if key == "head": self._block.head.pre_comment = value or [] else: self._block._set_pre_comment(key, value)
[docs] def __call__(self, key: Union[KTG, HEAD], **kw: bool) -> List[str]: """Return pre-line comment in specified format.""" return format_comment(self.__getitem__(key), **kw)