mirror of
https://github.com/jlengrand/bugsink.git
synced 2026-03-10 08:01:17 +00:00
Message service backend setup: switch config form per-service in the UI
See #281, which this commit prepares for
This commit is contained in:
@@ -3,7 +3,7 @@ from django.forms import ModelForm
|
||||
from .models import MessagingServiceConfig
|
||||
|
||||
|
||||
class MessagingServiceConfigForm(ModelForm):
|
||||
class MessagingServiceConfigNewForm(ModelForm):
|
||||
|
||||
def __init__(self, project, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
@@ -19,3 +19,13 @@ class MessagingServiceConfigForm(ModelForm):
|
||||
if commit:
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
|
||||
class MessagingServiceConfigEditForm(ModelForm):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
model = MessagingServiceConfig
|
||||
fields = ["display_name"]
|
||||
|
||||
@@ -14,7 +14,7 @@ class Migration(migrations.Migration):
|
||||
model_name="messagingserviceconfig",
|
||||
name="kind",
|
||||
field=models.CharField(
|
||||
choices=alerts.models.kind_choices, default="slack", max_length=20
|
||||
choices=alerts.models.get_alert_service_kind_choices, default="slack", max_length=20
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -6,7 +6,7 @@ from .service_backends.mattermost import MattermostBackend
|
||||
from .service_backends.discord import DiscordBackend
|
||||
|
||||
|
||||
def kind_choices():
|
||||
def get_alert_service_kind_choices():
|
||||
# As a callable to avoid non-DB-affecting migrations for adding new kinds.
|
||||
# Messaging backends don't need translations since they are brand names.
|
||||
return [
|
||||
@@ -16,12 +16,22 @@ def kind_choices():
|
||||
]
|
||||
|
||||
|
||||
def get_alert_service_backend_class(kind):
|
||||
if kind == "discord":
|
||||
return DiscordBackend
|
||||
if kind == "mattermost":
|
||||
return MattermostBackend
|
||||
if kind == "slack":
|
||||
return SlackBackend
|
||||
raise ValueError(f"Unknown backend kind: {kind}")
|
||||
|
||||
|
||||
class MessagingServiceConfig(models.Model):
|
||||
project = models.ForeignKey(Project, on_delete=models.DO_NOTHING, related_name="service_configs")
|
||||
display_name = models.CharField(max_length=100, blank=False,
|
||||
help_text='For display in the UI, e.g. "#general on company Slack"')
|
||||
|
||||
kind = models.CharField(choices=kind_choices, max_length=20, default="slack")
|
||||
kind = models.CharField(choices=get_alert_service_kind_choices, max_length=20, default="slack")
|
||||
|
||||
config = models.TextField(blank=False)
|
||||
|
||||
@@ -40,13 +50,7 @@ class MessagingServiceConfig(models.Model):
|
||||
help_text="Error message from the exception")
|
||||
|
||||
def get_backend(self):
|
||||
if self.kind == "discord":
|
||||
return DiscordBackend(self)
|
||||
if self.kind == "mattermost":
|
||||
return MattermostBackend(self)
|
||||
if self.kind == "slack":
|
||||
return SlackBackend(self)
|
||||
raise ValueError(f"Unknown backend kind: {self.kind}")
|
||||
return get_alert_service_backend_class(self.kind)(self)
|
||||
|
||||
def clear_failure_status(self):
|
||||
"""Clear all failure tracking fields on successful operation"""
|
||||
|
||||
@@ -203,7 +203,8 @@ class DiscordBackend:
|
||||
def __init__(self, service_config):
|
||||
self.service_config = service_config
|
||||
|
||||
def get_form_class(self):
|
||||
@classmethod
|
||||
def get_form_class(cls):
|
||||
return DiscordConfigForm
|
||||
|
||||
def send_test_message(self):
|
||||
|
||||
@@ -185,7 +185,8 @@ class MattermostBackend:
|
||||
def __init__(self, service_config):
|
||||
self.service_config = service_config
|
||||
|
||||
def get_form_class(self):
|
||||
@classmethod
|
||||
def get_form_class(cls):
|
||||
return MattermostConfigForm
|
||||
|
||||
def send_test_message(self):
|
||||
|
||||
@@ -222,7 +222,8 @@ class SlackBackend:
|
||||
def __init__(self, service_config):
|
||||
self.service_config = service_config
|
||||
|
||||
def get_form_class(self):
|
||||
@classmethod
|
||||
def get_form_class(cls):
|
||||
return SlackConfigForm
|
||||
|
||||
def send_test_message(self):
|
||||
|
||||
Reference in New Issue
Block a user