Source code for robot.model.message

#  Copyright 2008-2015 Nokia Networks
#  Copyright 2016-     Robot Framework Foundation
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

from datetime import datetime
from typing import Literal

from robot.utils import html_escape, setter

from .body import BodyItem

MessageLevel = Literal["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FAIL", "SKIP"]


[docs] class Message(BodyItem): """A message created during the test execution. Can be a log message triggered by a keyword, or a warning or an error that occurred during parsing or test execution. """ type = BodyItem.MESSAGE repr_args = ("message", "level") __slots__ = ("message", "level", "html", "_timestamp") def __init__( self, message: str = "", level: MessageLevel = "INFO", html: bool = False, timestamp: "datetime|str|None" = None, parent: "BodyItem|None" = None, ): self.message = message self.level = level self.html = html self.timestamp = timestamp self.parent = parent @setter def timestamp(self, timestamp: "datetime|str|None") -> "datetime|None": if isinstance(timestamp, str): return datetime.fromisoformat(timestamp) return timestamp @property def html_message(self): """Returns the message content as HTML.""" return self.message if self.html else html_escape(self.message) @property def id(self): if not self.parent: return "m1" if hasattr(self.parent, "messages"): messages = self.parent.messages else: messages = self.parent.body.filter(messages=True) index = messages.index(self) if self in messages else len(messages) return f"{self.parent.id}-m{index + 1}"
[docs] def visit(self, visitor): """:mod:`Visitor interface <robot.model.visitor>` entry-point.""" visitor.visit_message(self)
[docs] def to_dict(self): data = {"message": self.message, "level": self.level} if self.html: data["html"] = True if self.timestamp: data["timestamp"] = self.timestamp.isoformat() return data
def __str__(self): return self.message