diff --git a/netbox_acls/migrations/0005_alter_accesslist_name.py b/netbox_acls/migrations/0005_alter_accesslist_name.py new file mode 100644 index 00000000..6e873a61 --- /dev/null +++ b/netbox_acls/migrations/0005_alter_accesslist_name.py @@ -0,0 +1,29 @@ +# Generated by Django 5.2.5 on 2025-08-20 11:14 + +import re + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("netbox_acls", "0004_netbox_acls"), + ] + + operations = [ + migrations.AlterField( + model_name="accesslist", + name="name", + field=models.CharField( + max_length=500, + validators=[ + django.core.validators.RegexValidator( + re.compile("^[-a-zA-Z0-9_]+\\Z"), + "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.", + "invalid", + ) + ], + ), + ), + ] diff --git a/netbox_acls/models/access_lists.py b/netbox_acls/models/access_lists.py index 5035a8df..04694150 100644 --- a/netbox_acls/models/access_lists.py +++ b/netbox_acls/models/access_lists.py @@ -6,7 +6,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError -from django.core.validators import RegexValidator +from django.core.validators import validate_slug from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -22,12 +22,6 @@ ) -alphanumeric_plus = RegexValidator( - r"^[a-zA-Z0-9-_]+$", - _("Only alphanumeric, hyphens, and underscores characters are allowed."), -) - - class AccessList(NetBoxModel): """ Model definition for Access Lists. @@ -36,7 +30,7 @@ class AccessList(NetBoxModel): name = models.CharField( verbose_name=_("Name"), max_length=500, - validators=[alphanumeric_plus], + validators=[validate_slug], ) assigned_object_type = models.ForeignKey( to=ContentType, diff --git a/netbox_acls/tests/models/test_accesslists.py b/netbox_acls/tests/models/test_accesslists.py index 579bd719..0098ab42 100644 --- a/netbox_acls/tests/models/test_accesslists.py +++ b/netbox_acls/tests/models/test_accesslists.py @@ -153,22 +153,6 @@ def test_duplicate_name_success(self): ) vm_acl.full_clean() - def test_alphanumeric_plus_fail(self): - """ - Test that AccessList names with non-alphanumeric (excluding '_' and '-') characters fail validation. - """ - non_alphanumeric_plus_chars = " !@#$%^&*()[]{};:,./<>?\|~=+" - - for i, char in enumerate(non_alphanumeric_plus_chars, start=1): - bad_acl_name = AccessList( - name=f"Test-ACL-bad_name_{i}_{char}", - assigned_object=self.device1, - comments=f'ACL with "{char}" in name', - **self.common_acl_params, - ) - with self.assertRaises(ValidationError): - bad_acl_name.full_clean() - def test_duplicate_name_per_device_fail(self): """ Test that AccessList names must be unique per device.