Source code for aiida.orm.nodes.comments
"""Interface for comments of a node instance."""
from __future__ import annotations
import typing as t
from ..comments import Comment
from ..users import User
if t.TYPE_CHECKING:
from .node import Node
[docs]
class NodeComments:
"""Interface for comments of a node instance."""
[docs]
def __init__(self, node: 'Node') -> None:
"""Initialize the comments interface."""
self._node = node
[docs]
def add(self, content: str, user: t.Optional[User] = None) -> Comment:
"""Add a new comment.
:param content: string with comment
:param user: the user to associate with the comment, will use default if not supplied
:return: the newly created comment
"""
user = user or User.get_collection(self._node.backend).get_default()
return Comment(backend=self._node.backend, node=self._node, user=user, content=content).store()
[docs]
def get(self, identifier: int) -> Comment:
"""Return a comment corresponding to the given identifier.
:param identifier: the comment pk
:raise aiida.common.NotExistent: if the comment with the given id does not exist
:raise aiida.common.MultipleObjectsError: if the id cannot be uniquely resolved to a comment
:return: the comment
"""
return Comment.get_collection(self._node.backend).get(dbnode_id=self._node.pk, id=identifier)
[docs]
def all(self) -> list[Comment]:
"""Return a sorted list of comments for this node.
:return: the list of comments, sorted by pk
"""
return Comment.get_collection(self._node.backend).find(
filters={'dbnode_id': self._node.pk}, order_by=[{'id': 'asc'}]
)
[docs]
def update(self, identifier: int, content: str) -> None:
"""Update the content of an existing comment.
:param identifier: the comment pk
:param content: the new comment content
:raise aiida.common.NotExistent: if the comment with the given id does not exist
:raise aiida.common.MultipleObjectsError: if the id cannot be uniquely resolved to a comment
"""
comment = Comment.get_collection(self._node.backend).get(dbnode_id=self._node.pk, id=identifier)
comment.set_content(content)
[docs]
def remove(self, identifier: int) -> None:
"""Delete an existing comment.
:param identifier: the comment pk
"""
Comment.get_collection(self._node.backend).delete(identifier)