Instantiate Jinja environment and create renderer in base webhook

This commit is contained in:
Zedifus 2024-04-21 17:40:26 +01:00
parent 438b7cc6ab
commit ae4f806bac

View File

@ -1,6 +1,7 @@
from abc import ABC, abstractmethod
import logging
import requests
from jinja2 import Environment, BaseLoader
from app.classes.shared.helpers import Helpers
@ -16,6 +17,9 @@ class WebhookProvider(ABC):
ensuring that each provider will have a send method.
"""
def __init__(self):
self.jinja_env = Environment(loader=BaseLoader())
WEBHOOK_USERNAME = "Crafty Webhooks"
WEBHOOK_PFP_URL = (
"https://gitlab.com/crafty-controller/crafty-4/-"
@ -34,6 +38,25 @@ class WebhookProvider(ABC):
logger.error(error)
raise RuntimeError(f"Failed to dispatch notification: {error}") from error
def render_template(self, template_str, context):
"""
Renders a Jinja2 template with the provided context.
Args:
template_str (str): The Jinja2 template string.
context (dict): A dictionary containing all the variables needed for
rendering the template.
Returns:
str: The rendered message.
"""
try:
template = self.jinja_env.from_string(template_str)
return template.render(context)
except Exception as error:
logger.error(f"Error rendering Jinja2 template: {error}")
raise
@abstractmethod
def send(self, server_name, title, url, message, **kwargs):
def send(self, server_name, title, url, message_template, event_data, **kwargs):
"""Abstract method that derived classes will implement for sending webhooks."""