diff options
author | 2019-02-07 21:59:42 +0100 | |
---|---|---|
committer | 2019-02-07 21:59:42 +0100 | |
commit | 68d1d75d19df39c018578b8928c36547bfca7304 (patch) | |
tree | 72c97df17a5e3bf069cd53b487a47ba94f431850 | |
parent | Define proper update method. (diff) |
Add a bot setting model.
-rw-r--r-- | api/migrations/0032_botsetting.py | 23 | ||||
-rw-r--r-- | api/models.py | 15 | ||||
-rw-r--r-- | api/tests/test_models.py | 16 | ||||
-rw-r--r-- | api/validators.py | 9 |
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.") |