Finish implementing notification rules

This commit is contained in:
2023-01-12 07:20:48 +00:00
parent f93d37d1c0
commit 4dd8224a77
12 changed files with 192 additions and 12 deletions

View File

@@ -3,9 +3,16 @@ import logging
import stripe
from django.contrib.auth.models import AbstractUser
from django.db import models
from yaml import load
from yaml.parser import ParserError
from yaml.scanner import ScannerError
from core.lib.customers import get_or_create, update_customer_fields
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
logger = logging.getLogger(__name__)
@@ -60,6 +67,9 @@ class User(AbstractUser):
plan_list = [plan.name for plan in self.plans.all()]
return plan in plan_list
def get_notification_settings(self):
return NotificationSettings.objects.get_or_create(user=self)[0]
class Session(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
@@ -131,7 +141,14 @@ class NotificationRule(models.Model):
data = models.TextField()
def __str__(self):
return f"{self.user} - {self.rule}"
return f"{self.user} - {self.name}"
def parse(self):
try:
parsed = load(self.data, Loader=Loader)
except (ScannerError, ParserError) as e:
raise ValueError(f"Invalid YAML: {e}")
return parsed
class NotificationSettings(models.Model):