Skip to content
Snippets Groups Projects
Commit f57d9789 authored by Benjamin Bertrand's avatar Benjamin Bertrand
Browse files

Create generic RegexpList field validator

Used to validate a list of strings against a regular expresssion.
parent ba27ff55
No related branches found
No related tags found
No related merge requests found
......@@ -9,20 +9,11 @@ This module defines the inventory blueprint forms.
:license: BSD 2-Clause, see LICENSE for more details.
"""
import re
from wtforms import SelectField, StringField, TextAreaField, validators
from ..helpers import CSEntryForm
from ..validators import Unique
from ..validators import Unique, RegexpList, MAC_ADDRESS_RE
from .. import utils, models
MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')
def check_mac_addresses_list(form, field):
for address in field.data.split():
if MAC_ADDRESS_RE.match(address) is None:
raise validators.ValidationError('Invalid Mac address')
class AttributeForm(CSEntryForm):
name = StringField('name', validators=[validators.DataRequired()])
......@@ -43,7 +34,8 @@ class ItemForm(CSEntryForm):
mac_addresses = StringField(
'MAC addresses',
description='space separated list of MAC addresses',
validators=[validators.Optional(), check_mac_addresses_list])
validators=[validators.Optional(),
RegexpList(MAC_ADDRESS_RE, message='Invalid MAC address')])
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
......
......@@ -10,9 +10,12 @@ This module defines extra field validators
"""
import ipaddress
import re
import sqlalchemy as sa
from wtforms import ValidationError
MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')
class IPNetwork:
"""Validates an IP network.
......@@ -59,3 +62,21 @@ class Unique(object):
raise ValidationError(self.message)
except sa.orm.exc.NoResultFound:
pass
class RegexpList:
"""Validates a list of strings against a user provided regexp.
:param regex: the regular expression to use
:param message: the error message
"""
def __init__(self, regex, message=None):
self.regex = regex
if message is None:
message = 'Invalid input.'
self.message = message
def __call__(self, form, field):
for string in field.data.split():
if self.regex.match(string) is None:
raise ValidationError(self.message)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment