aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2019-02-07 21:59:42 +0100
committerGravatar Johannes Christ <[email protected]>2019-02-07 21:59:42 +0100
commit68d1d75d19df39c018578b8928c36547bfca7304 (patch)
tree72c97df17a5e3bf069cd53b487a47ba94f431850 /api
parentDefine proper update method. (diff)
Add a bot setting model.
Diffstat (limited to 'api')
-rw-r--r--api/migrations/0032_botsetting.py23
-rw-r--r--api/models.py15
-rw-r--r--api/tests/test_models.py16
-rw-r--r--api/validators.py9
4 files changed, 54 insertions, 9 deletions
diff --git a/api/migrations/0032_botsetting.py b/api/migrations/0032_botsetting.py
new file mode 100644
index 00000000..4ad1323e
--- /dev/null
+++ b/api/migrations/0032_botsetting.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.1.5 on 2019-02-07 19:03
+
+import api.models
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0031_nomination'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='BotSetting',
+ fields=[
+ ('name', models.CharField(max_length=50, primary_key=True, serialize=False)),
+ ('data', django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual settings of this setting.')),
+ ],
+ bases=(api.models.ModelReprMixin, models.Model),
+ ),
+ ]
diff --git a/api/models.py b/api/models.py
index fa68f31c..86c99f86 100644
--- a/api/models.py
+++ b/api/models.py
@@ -5,7 +5,7 @@ from django.core.validators import MaxValueValidator, MinValueValidator, RegexVa
from django.db import models
from django.utils import timezone
-from .validators import validate_tag_embed
+from .validators import validate_bot_setting_name, validate_tag_embed
class ModelReprMixin:
@@ -27,6 +27,19 @@ class ModelReprMixin:
return f'<{self.__class__.__name__}({attributes})>'
+class BotSetting(ModelReprMixin, models.Model):
+ """A configuration entry for the bot."""
+
+ name = models.CharField(
+ primary_key=True,
+ max_length=50,
+ validators=(validate_bot_setting_name,)
+ )
+ data = pgfields.JSONField(
+ help_text="The actual settings of this setting."
+ )
+
+
class DocumentationLink(ModelReprMixin, models.Model):
"""A documentation link used by the `!docs` command of the bot."""
diff --git a/api/tests/test_models.py b/api/tests/test_models.py
index a958419d..43d1eb41 100644
--- a/api/tests/test_models.py
+++ b/api/tests/test_models.py
@@ -3,14 +3,14 @@ from datetime import datetime as dt, timezone
from django.test import SimpleTestCase
from ..models import (
- DeletedMessage, DocumentationLink,
- Infraction, Message,
- MessageDeletionContext, ModelReprMixin,
- OffTopicChannelName, Reminder,
- Role, SnakeFact,
- SnakeIdiom, SnakeName,
- SpecialSnake, Tag,
- User
+ BotSetting, DeletedMessage,
+ DocumentationLink, Infraction,
+ Message, MessageDeletionContext,
+ ModelReprMixin, OffTopicChannelName,
+ Reminder, Role,
+ SnakeFact, SnakeIdiom,
+ SnakeName, SpecialSnake,
+ Tag, User
)
diff --git a/api/validators.py b/api/validators.py
index 7673c3fe..35bbfab4 100644
--- a/api/validators.py
+++ b/api/validators.py
@@ -153,3 +153,12 @@ def validate_tag_embed(embed):
if field_name in field_validators:
for validator in field_validators[field_name]:
validator(value)
+
+
+def validate_bot_setting_name(name):
+ KNOWN_SETTINGS = (
+ 'defcon',
+ )
+
+ if name not in KNOWN_SETTINGS:
+ raise ValidationError(f"`{name}` is not a known setting name.")