diff options
| -rw-r--r-- | pydis_site/apps/api/migrations/0069_documentationlink_validators.py (renamed from pydis_site/apps/api/migrations/0069_documentationlink_packagename_validator.py) | 8 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/bot/documentation_link.py | 20 | 
2 files changed, 20 insertions, 8 deletions
| diff --git a/pydis_site/apps/api/migrations/0069_documentationlink_packagename_validator.py b/pydis_site/apps/api/migrations/0069_documentationlink_validators.py index 4234e633..347c0e1a 100644 --- a/pydis_site/apps/api/migrations/0069_documentationlink_packagename_validator.py +++ b/pydis_site/apps/api/migrations/0069_documentationlink_validators.py @@ -1,7 +1,8 @@ -# Generated by Django 3.0.11 on 2021-03-14 23:22 +# Generated by Django 3.0.11 on 2021-03-26 18:21  import django.core.validators  from django.db import migrations, models +import pydis_site.apps.api.models.bot.documentation_link  class Migration(migrations.Migration): @@ -13,6 +14,11 @@ class Migration(migrations.Migration):      operations = [          migrations.AlterField(              model_name='documentationlink', +            name='base_url', +            field=models.URLField(help_text='The base URL from which documentation will be available for this project. Used to generate links to various symbols within this package.', validators=[pydis_site.apps.api.models.bot.documentation_link.ends_with_slash_validator]), +        ), +        migrations.AlterField( +            model_name='documentationlink',              name='package',              field=models.CharField(help_text='The Python package name that this documentation link belongs to.', max_length=50, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(message='Package names can only consist of lowercase a-z letters, digits, and underscores.', regex='^[a-z0-9_]+$')]),          ), diff --git a/pydis_site/apps/api/models/bot/documentation_link.py b/pydis_site/apps/api/models/bot/documentation_link.py index 529d26d1..3dcc71fc 100644 --- a/pydis_site/apps/api/models/bot/documentation_link.py +++ b/pydis_site/apps/api/models/bot/documentation_link.py @@ -1,30 +1,36 @@ +from django.core.exceptions import ValidationError  from django.core.validators import RegexValidator  from django.db import models  from pydis_site.apps.api.models.mixins import ModelReprMixin -package_name_validator = ( -    RegexValidator( -        regex=r"^[a-z0-9_]+$", -        message="Package names can only consist of lowercase a-z letters, digits, and underscores." -    ), +package_name_validator = RegexValidator( +    regex=r"^[a-z0-9_]+$", +    message="Package names can only consist of lowercase a-z letters, digits, and underscores."  ) +def ends_with_slash_validator(string: str) -> None: +    """Raise a ValidationError if `string` does not end with a slash.""" +    if not string.endswith("/"): +        raise ValidationError("The entered URL must end with a slash.") + +  class DocumentationLink(ModelReprMixin, models.Model):      """A documentation link used by the `!docs` command of the bot."""      package = models.CharField(          primary_key=True,          max_length=50, -        validators=package_name_validator, +        validators=(package_name_validator,),          help_text="The Python package name that this documentation link belongs to."      )      base_url = models.URLField(          help_text=(              "The base URL from which documentation will be available for this project. "              "Used to generate links to various symbols within this package." -        ) +        ), +        validators=(ends_with_slash_validator,)      )      inventory_url = models.URLField(          help_text="The URL at which the Sphinx inventory is available for this package." | 
