aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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.py20
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."