bots/triage-slackbot/triage_slackbot/category.py (22 lines of code) (raw):

import typing as t from pydantic import BaseModel, ValidationError, model_validator OTHER_KEY = "other" class RequestCategory(BaseModel): # Key used to identify the category in the config. key: str # Display name of the category. display_name: str # Slack ID of the user or channel to route the request to. # If user is specified, user will be tagged on the message # in the feed channel. oncall_slack_id: t.Optional[str] = None # If true, no manual triage is required for this category # and that the bot will autorespond to the inbound request. autorespond: bool = False # Message to send when autoresponding to the inbound request. autorespond_message: t.Optional[str] = None @model_validator(mode="after") def check_autorespond(self) -> "RequestCategory": if self.autorespond and not self.autorespond_message: raise ValidationError("autorespond_message must be set if autorespond is True") return self @property def route_to_channel(self) -> bool: return (self.oncall_slack_id or "").startswith("C") @classmethod def to_block_options(cls, categories: t.List["RequestCategory"]) -> t.Dict[str, str]: return dict((c.key, c.display_name) for c in categories) def is_other(self) -> bool: return self.key == OTHER_KEY