diff options
| author | 2022-10-01 19:48:25 +0300 | |
|---|---|---|
| committer | 2022-10-01 19:48:25 +0300 | |
| commit | 1970a3651db1e1a4f2ef92c85a0a733fa23fa6f0 (patch) | |
| tree | 39f2254b44519ad8f4e5e21ff6d1fdfeb0500c15 | |
| parent | Fix send_alert not being added correctly in serializers (diff) | |
Bring back enabled categories
There needs to be a way to only enable a filter in a specific category, so this setting now fulfills that role. Disabled channels can be used to disable a filter in a specific channel within the category.
4 files changed, 18 insertions, 7 deletions
| diff --git a/pydis_site/apps/api/migrations/0084_new_filter_schema.py b/pydis_site/apps/api/migrations/0084_new_filter_schema.py index ba228d70..74e1f009 100644 --- a/pydis_site/apps/api/migrations/0084_new_filter_schema.py +++ b/pydis_site/apps/api/migrations/0084_new_filter_schema.py @@ -51,6 +51,7 @@ def forward(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None:              disabled_channels=[],              disabled_categories=(["CODE JAM"] if name in ("FILE_FORMAT", "GUILD_INVITE") else []),              enabled_channels=[], +            enabled_categories=[],              send_alert=(name in ('GUILD_INVITE', 'DOMAIN_NAME', 'FILTER_TOKEN'))          ) @@ -74,6 +75,7 @@ def forward(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None:                  disabled_channels=None,                  disabled_categories=None,                  enabled_channels=None, +                enabled_categories=None,                  send_alert=None,              )              new_object.save() @@ -111,6 +113,7 @@ class Migration(migrations.Migration):                  ('disabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to not run the filter.", null=True, size=None)),                  ('disabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Categories in which to not run the filter.", null=True, size=None)),                  ('enabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to run the filter even if it's disabled in the category.", null=True, size=None)), +                ('enabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="The only categories in which to run the filter.", null=True, size=None)),                  ('send_alert', models.BooleanField(help_text='Whether an alert should be sent.', null=True)),              ],          ), @@ -134,6 +137,7 @@ class Migration(migrations.Migration):                  ('disabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to not run the filter.", size=None)),                  ('disabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Categories in which to not run the filter.", size=None)),                  ('enabled_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="Channels in which to run the filter even if it's disabled in the category.", size=None)), +                ('enabled_categories', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), help_text="The only categories in which to run the filter.", size=None)),                  ('send_alert', models.BooleanField(help_text='Whether an alert should be sent.')),              ],          ), diff --git a/pydis_site/apps/api/migrations/0085_unique_constraint_filters.py b/pydis_site/apps/api/migrations/0085_unique_constraint_filters.py index 418c6e71..55ede901 100644 --- a/pydis_site/apps/api/migrations/0085_unique_constraint_filters.py +++ b/pydis_site/apps/api/migrations/0085_unique_constraint_filters.py @@ -30,6 +30,7 @@ class Migration(migrations.Migration):                  'send_alert',                  'enabled_channels',                  'disabled_channels', +                'enabled_categories',                  'disabled_categories'              ), name='unique_filters'),          ), diff --git a/pydis_site/apps/api/models/bot/filters.py b/pydis_site/apps/api/models/bot/filters.py index 1fb9707d..95a10e42 100644 --- a/pydis_site/apps/api/models/bot/filters.py +++ b/pydis_site/apps/api/models/bot/filters.py @@ -84,11 +84,6 @@ class FilterList(FilterSettingsMixin):          help_text="Whether an alert should be sent.",      )      # Where a filter should apply. -    # -    # The resolution is done in the following order: -    #   - enabled_channels -    #   - disabled_categories -    #   - disabled_channels      enabled_channels = ArrayField(          models.CharField(max_length=100),          help_text="Channels in which to run the filter even if it's disabled in the category." @@ -97,6 +92,10 @@ class FilterList(FilterSettingsMixin):          models.CharField(max_length=100),          help_text="Channels in which to not run the filter."      ) +    enabled_categories = ArrayField( +        models.CharField(max_length=100), +        help_text="The only categories in which to run the filter." +    )      disabled_categories = ArrayField(          models.CharField(max_length=100),          help_text="Categories in which to not run the filter." @@ -165,6 +164,11 @@ class FilterBase(FilterSettingsMixin):          models.CharField(max_length=100),          help_text="Channels in which to not run the filter.", null=True      ) +    enabled_categories = ArrayField( +        models.CharField(max_length=100), +        help_text="The only categories in which to run the filter.", +        null=True +    )      disabled_categories = ArrayField(          models.CharField(max_length=100),          help_text="Categories in which to not run the filter.", diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 50200035..26bda035 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -159,6 +159,7 @@ REQUIRED_FOR_FILTER_LIST_SETTINGS = (      'enabled',      'enabled_channels',      'disabled_channels', +    'enabled_categories',      'disabled_categories',  ) @@ -183,6 +184,7 @@ CHANNEL_SCOPE_FIELDS = (      "disabled_channels",      "disabled_categories",      "enabled_channels", +    "enabled_categories"  )  MENTIONS_FIELDS = ("guild_pings", "dm_pings") @@ -208,9 +210,9 @@ class FilterSerializer(ModelSerializer):                  raise ValidationError("Enabled and Disabled channels lists contain duplicates.")          if data.get('disabled_categories') is not None: -            categories_collection = data['disabled_categories'] +            categories_collection = data['disabled_categories'] + data['enabled_categories']              if len(categories_collection) != len(set(categories_collection)): -                raise ValidationError("Disabled categories lists contain duplicates.") +                raise ValidationError("Enabled and Disabled categories lists contain duplicates.")          return data | 
