Source code for fmn.database.model.destination
# SPDX-FileCopyrightText: Contributors to the Fedora Project
#
# SPDX-License-Identifier: MIT
from typing import TYPE_CHECKING
from sqlalchemy import Column, ForeignKey, Integer, String, UnicodeText
from sqlalchemy.orm import relationship
from ..main import Base
from .generation_rule import GenerationRule
if TYPE_CHECKING:
from fedora_messaging.message import Message
from ...rules.notification import Notification
[docs]class Destination(Base):
__tablename__ = "destinations"
id = Column(Integer, primary_key=True, nullable=False)
generation_rule_id = Column(
Integer, ForeignKey(GenerationRule.id, ondelete="CASCADE"), nullable=False
)
generation_rule = relationship(GenerationRule, back_populates="destinations")
protocol = Column(String(length=255), nullable=False)
address = Column(UnicodeText, nullable=False)
[docs] def generate(self, message: "Message") -> "Notification.content":
app_name = f"[{message.app_name}] " if message.app_name else ""
url = message.url if message.url else ""
if self.protocol == "email":
return {
"headers": {
"To": self.address,
"Subject": f"{app_name}{message.summary}",
},
"body": f"{str(message)}\n{url}",
}
elif self.protocol == "irc":
return {"to": self.address, "message": f"{app_name}{message.summary} {url}"}
elif self.protocol == "matrix":
return {"to": self.address, "message": f"{app_name}{message.summary} {url}"}
else:
raise ValueError(f"Unknown destination protocol: {self.protocol}")