Source code for fmn.database.model.filter
# SPDX-FileCopyrightText: Contributors to the Fedora Project
#
# SPDX-License-Identifier: MIT
from importlib.metadata import entry_points
from typing import TYPE_CHECKING
from sqlalchemy import JSON, Column, ForeignKey, Integer, String
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.requester import Requester
[docs]class Filter(Base):
__tablename__ = "filters"
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="filters")
name = Column(String(length=255), nullable=False)
params = Column(JSON)
[docs] def get_implementation(self, requester: "Requester"):
eps = entry_points(group="fmn.filters", name=self.name)
if len(eps) != 1:
raise ValueError(f"Unknown filter: {self.name}")
impl_class = eps[self.name].load()
username = self.generation_rule.rule.user.name
return impl_class(requester=requester, params=self.params, username=username)
[docs] def matches(self, message: "Message", requester: "Requester"):
impl = self.get_implementation(requester)
return impl.matches(message)