sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #05403
[Merge] ~ack/maas:drop-verbose-regex-validator into maas:master
Alberto Donato has proposed merging ~ack/maas:drop-verbose-regex-validator into maas:master.
Commit message:
drop VerboseRegexValidator since the builtin RegexValidator already provides the value
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/437951
--
Your team MAAS Maintainers is requested to review the proposed merge of ~ack/maas:drop-verbose-regex-validator into maas:master.
diff --git a/src/maasserver/fields.py b/src/maasserver/fields.py
index 94d64cf..bc8277d 100644
--- a/src/maasserver/fields.py
+++ b/src/maasserver/fields.py
@@ -14,7 +14,6 @@ __all__ = [
"MACAddressFormField",
"MODEL_NAME_VALIDATOR",
"NodeChoiceField",
- "VerboseRegexValidator",
"VersionedTextFileField",
]
@@ -57,27 +56,7 @@ MAC_RE = re.compile(
MAC_ERROR_MSG = "'%(value)s' is not a valid MAC address."
-class VerboseRegexValidator(RegexValidator):
- """A verbose `RegexValidator`.
-
- This `RegexValidator` includes the checked value in the rendered error
- message when the validation fails.
- """
-
- # Set a bugus code to circumvent Django's attempt to re-interpret a
- # validator's error message using the field's message it is attached
- # to.
- code = "bogus-code"
-
- def __call__(self, value):
- """Validates that the input matches the regular expression."""
- if not self.regex.search(force_str(value)):
- raise ValidationError(
- self.message % {"value": value}, code=self.code
- )
-
-
-mac_validator = VerboseRegexValidator(regex=MAC_RE, message=MAC_ERROR_MSG)
+mac_validator = RegexValidator(regex=MAC_RE, message=MAC_ERROR_MSG)
class StrippedCharField(forms.CharField):
@@ -108,26 +87,16 @@ class UnstrippedCharField(forms.CharField):
parent_init(*args, **kwargs)
-class VerboseRegexField(forms.CharField):
- def __init__(self, regex, message, *args, **kwargs):
- """A field that validates its value with a regular expression.
+class MACAddressFormField(forms.CharField):
+ """Form field type: MAC address."""
- :param regex: Either a string or a compiled regular expression object.
- :param message: Error message to use when the validation fails.
- """
+ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.validators.append(
- VerboseRegexValidator(regex=regex, message=message)
+ RegexValidator(regex=MAC_RE, message=MAC_ERROR_MSG)
)
-class MACAddressFormField(VerboseRegexField):
- """Form field type: MAC address."""
-
- def __init__(self, *args, **kwargs):
- super().__init__(regex=MAC_RE, message=MAC_ERROR_MSG, *args, **kwargs)
-
-
class MACAddressField(Field):
"""Model field type: MAC address."""
diff --git a/src/maasserver/migrations/maasserver/0001_initial.py b/src/maasserver/migrations/maasserver/0001_initial.py
index 681c113..2fadac9 100644
--- a/src/maasserver/migrations/maasserver/0001_initial.py
+++ b/src/maasserver/migrations/maasserver/0001_initial.py
@@ -780,7 +780,7 @@ class Migration(migrations.Migration):
help_text="Interface name.",
max_length=255,
validators=[
- maasserver.fields.VerboseRegexValidator(
+ django.core.validators.RegexValidator(
"^[\\w\\-_.:]+$"
)
],
@@ -1220,7 +1220,7 @@ class Migration(migrations.Migration):
max_length=255,
blank=True,
validators=[
- maasserver.fields.VerboseRegexValidator(
+ django.core.validators.RegexValidator(
"^[\\w:.-]+$"
)
],
diff --git a/src/maasserver/migrations/maasserver/0293_drop_verbose_regex_validator.py b/src/maasserver/migrations/maasserver/0293_drop_verbose_regex_validator.py
new file mode 100644
index 0000000..f5ede0a
--- /dev/null
+++ b/src/maasserver/migrations/maasserver/0293_drop_verbose_regex_validator.py
@@ -0,0 +1,26 @@
+# Generated by Django 3.2.12 on 2023-02-27 12:53
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("maasserver", "0292_use_builtin_json_field"),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name="interface",
+ name="name",
+ field=models.CharField(
+ help_text="Interface name.",
+ max_length=255,
+ validators=[
+ django.core.validators.RegexValidator(
+ regex="^[\\w\\-_.:]+$"
+ )
+ ],
+ ),
+ ),
+ ]
diff --git a/src/maasserver/models/interface.py b/src/maasserver/models/interface.py
index 5b765e4..1dba5f8 100644
--- a/src/maasserver/models/interface.py
+++ b/src/maasserver/models/interface.py
@@ -17,6 +17,7 @@ from zlib import crc32
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import PermissionDenied, ValidationError
+from django.core.validators import RegexValidator
from django.db.models import (
BooleanField,
CASCADE,
@@ -48,11 +49,7 @@ from maasserver.exceptions import (
StaticIPAddressOutOfRange,
StaticIPAddressUnavailable,
)
-from maasserver.fields import (
- mac_validator,
- MACAddressField,
- VerboseRegexValidator,
-)
+from maasserver.fields import mac_validator, MACAddressField
from maasserver.models.cleansave import CleanSave
from maasserver.models.staticipaddress import StaticIPAddress
from maasserver.models.timestampedmodel import TimestampedModel
@@ -551,7 +548,7 @@ class Interface(CleanSave, TimestampedModel):
blank=False,
editable=True,
max_length=255,
- validators=[VerboseRegexValidator(INTERFACE_NAME_REGEXP)],
+ validators=[RegexValidator(regex=INTERFACE_NAME_REGEXP)],
help_text="Interface name.",
)
diff --git a/src/maasserver/tests/test_fields.py b/src/maasserver/tests/test_fields.py
index 1f14e3b..ea6ce96 100644
--- a/src/maasserver/tests/test_fields.py
+++ b/src/maasserver/tests/test_fields.py
@@ -23,8 +23,6 @@ from maasserver.fields import (
SystemdIntervalField,
URLOrPPAFormField,
URLOrPPAValidator,
- VerboseRegexField,
- VerboseRegexValidator,
VersionedTextFileField,
)
from maasserver.models import Interface, Node, VersionedTextFile
@@ -65,34 +63,6 @@ class TestModelNameValidator(MAASServerTestCase):
)
-class TestVerboseRegexValidator(MAASServerTestCase):
- def test_VerboseRegexValidator_validates_value(self):
- validator = VerboseRegexValidator(
- regex="test", message="Unknown value"
- )
- self.assertIsNone(validator("test"))
-
- def test_VerboseRegexValidator_validation_error_includes_value(self):
- message = "Unknown value: %(value)s"
- validator = VerboseRegexValidator(regex="test", message=message)
- value = factory.make_name("value")
- error = self.assertRaises(ValidationError, validator, value)
- self.assertEqual(message % {"value": value}, error.message)
-
-
-class TestVerboseRegexField(MAASServerTestCase):
- def test_VerboseRegexField_accepts_valid_value(self):
- field = VerboseRegexField(regex="test", message="Unknown value")
- self.assertEqual("test", field.clean("test"))
-
- def test_VerboseRegexField_validation_error_includes_value(self):
- message = "Unknown value: %(value)s"
- field = VerboseRegexField(regex="test", message=message)
- value = factory.make_name("value")
- error = self.assertRaises(ValidationError, field.clean, value)
- self.assertEqual([message % {"value": value}], error.messages)
-
-
class TestMACAddressField(MAASServerTestCase):
def test_mac_address_is_stored_normalized_and_loaded(self):
interface = factory.make_Interface(
Follow ups